Null-aware Access
Part of the Fundamentals section of Coddy's Dart journey — lesson 29 of 94.
The null-aware access operator (?.) safely accesses properties on potentially null objects, preventing runtime errors.
void main() {
String? name = 'Dart';
int? length = name?.length;
print('Name: $name');
print('Length: $length');
}With null values, it returns null instead of crashing:
void main() {
String? name = null;
int? length = name?.length;
print('Name: $name');
print('Length: $length');
}Challenge
EasyCreate a Dart program that demonstrates the null-aware access operator (?.) with a game character:
- Create a nullable String variable called
playerNameand set it to null - Create a nullable int variable called
playerScoreand set it to 100 - Use the null-aware access operator (
?.) to get the length of the playerName and store it in a variable callednameLength - Print the following message:
Player name length: X(where X is the value of nameLength) - Update
playerNameto "Champion" - Use the null-aware access operator again to get the updated length and store it in
nameLength - Print the updated message:
Player name length: X(where X is the new value) - Print the player's score with this format:
Player score: 100
Cheat sheet
The null-aware access operator (?.) safely accesses properties on potentially null objects, preventing runtime errors.
When the object is not null, it returns the property value:
String? name = 'Dart';
int? length = name?.length; // Returns 4When the object is null, it returns null instead of crashing:
String? name = null;
int? length = name?.length; // Returns nullTry it yourself
void main() {
// Declare your nullable variables here
String? playerName = _;
int? playerScore = _;
// Get the length of playerName using ?. operator
int? nameLength = playerName_.length;
// Print the initial name length
print("Player name length: ${nameLength}");
// Update the playerName
playerName = _;
// Get the updated length using ?. operator
nameLength = playerName_.length;
// Print the updated name length
print("Player name length: ${nameLength}");
// Print the player's score
print("Player score: ${playerScore}");
}This lesson includes a short quiz. Start the lesson to answer it and track your progress.
All lessons in Fundamentals
4Operators Part 2
Comparison OperatorsLogical ANDLogical ORLogical NOTType Test OperatorsRecap - Making Comparisons7Working with Strings
String ConcatenationString InterpolationMulti-line StringsString PropertiesBasic String Methods10Collections - Maps Basics
What are Maps?Creating a MapAccessing Values by KeyKey-Value PairsGetting Map SizeGetting KeysGetting ValuesChecking if a Key Exists13Null Safety In Depth
Understanding NullNullable TypesNon-Nullable TypesNull Assertion OperatorLate InitializationRecap - Handling Null Safely16Fundamentals Challenges
Challenge: List of calculationChallenge: Sum of numbersChallenge: Find product2Variables and Basic Data Types
What are Variables?StringsIntegers (int)Doubles (double)Booleans (bool)Type Inference with 'var'Final VariablesConstant VariablesNaming ConventionsBasic Null SafetyRecap - Declaring Variables8Control Flow - Loops
The 'for' LoopThe 'while' LoopThe 'do-while' LoopUsing 'break' in LoopsUsing 'continue' in LoopsRecap - Repeating Code3Operators Part 1
Arithmetic OperatorsInteger DivisionModulo OperatorIncrement and DecrementAssignment ShortcutsRecap - Simple Calculations6Control Flow - Decision Making
The 'if' StatementThe 'else' StatementThe 'else if' StatementRecap - Simple DecisionsNested 'if' StatementsThe 'switch' Statement9Collections - Lists Basics
What are Lists?Creating a ListAccessing by IndexGetting List LengthAdding ElementsRemoving ElementsChecking if a List is EmptyIterating Over a List12Functions Advanced
Optional Positional ParametersNamed ParametersRequired Named ParametersDefault Parameter ValuesRecap - Function Parameters15Project: Simple Calculator
Setting UpDeclaring Number