Menu
Coddy logo textTech

基本的な Null 安全性

CoddyのDartジャーニー「基礎」セクションの一部 — レッスン 14/94。

Null safety は、どの変数が空(null)になるかを制御することで、予期しないアプリのクラッシュを防ぎます。

デフォルトでは、変数は値を含まなければなりません:

void main() {
  String name = 'Dart';
  print(name);  // 出力: Dart
  
  // これは問題を引き起こします:
  // name = null;  // 許可されていません
}

型の後に ? を追加して null 値を許可します:

void main() {
  String? name = 'Dart';
  print(name);  // 出力: Dart
  
  // 今、null を割り当てることができます
  name = null;
  print(name);  // 出力: null
}

任意の型の null 可能変数を宣言できます:

void main() {
  int? age;  // 初期値なし、デフォルトで null
  double? price = 19.99;
  bool? isAvailable = true;
  
  print(age);         // 出力: null
  print(price);       // 出力: 19.99
  print(isAvailable); // 出力: true
  
  // これらのいずれかを null に変更できます
  price = null;
  isAvailable = null;
}

 

Null 安全性は、コードが操作で null 値を使用しようとしたときに発生する予期しないクラッシュからアプリを保護するのに役立ちます。

challenge icon

チャレンジ

初心者

? 演算子を使用して、基本的な null 安全性を示す Dart プログラムを作成してください:

  1. username という名前の String 変数を宣言し、null 安全演算子 ? (String?) を使用して null に設定してください
  2. userAge という名前の int 変数を宣言し、null 安全演算子を使用して null に設定してください
  3. 以下の EXACT 形式でラベル付きで両方の変数を印刷してください:
Username: null
User age: null

次に:

  1. username 変数に値 "DartLearner" を割り当ててください
  2. userAge 変数に値 25 を割り当ててください
  3. 前にと同じ EXACT 形式で両方の変数を再度印刷してください

出力は上記に示された正確な形式と一致する必要があります。

チートシート

デフォルトでは、Dartの変数はnullにはできません。null値を許可するために、型名の後に?を追加します:

// Non-nullable (default)
String name = 'Dart';

// Nullable with ?
String? name = 'Dart';
name = null;  // Now allowed

任意の型のnull可能な変数を宣言できます:

int? age;           // Defaults to null
double? price = 19.99;
bool? isAvailable = true;

// All can be set to null
price = null;
isAvailable = null;

自分で試してみよう

void main() {
  // ここに nullable 変数を宣言する
  String? username = ?;
  int? userAge = ?;
  
  // ラベル付きで初期値を印刷する
  print("Username: " + username.toString());
  print("User age: " + userAge.toString());
  
  // 変数に新しい値を割り当てる
  username = ?;
  userAge = ?;
  
  // 同じラベルで更新された値を印刷する
  print("Username: " + username.toString());
  print("User age: " + userAge.toString());
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン