この記事では、Dartのif文について書いていきます。
サンプル
void main() {
int x = 5;
if (x > 0) {
print("xは正の数です");
} else if (x == 0) {
print("xはゼロです");
} else {
print("xは負の数です");
}
}if文とは
if文を使えば最初の条件をみたしたときに処理を行うことができます。
また、else-if文を使うと最初の条件を満たさない場合(最初の条件式の結果がtrueでなかったとき)に次に判定して実行したい処理も記述することができます。
書き方は以下の通りです。
書き方(if else)
if(条件式){
// 条件を満たしたときに実行する処理
}else{
// 条件を満たさなかったときに実行する処理
}書き方(else if)
if(条件式A){
// 条件式Aを満たしたときに実行する処理
}else if(条件式B){
// 条件式Aを満たさず、条件式Bを満たしたときに実行する処理
}else{
// どの条件式も満たさなかったときに実行する処理
}簡素化した書き方
int textLength = 5;
void main(){
// 5文字より多ければ「長い」、そうでなければ「短い」
String result = textLength > 5 ? '長い' : '短い';
print(result); // 出力: 短い
}簡素化した書き方には、演算子を使用しています。詳しくは以下のページで解説しています。
よく使用ずるプロパティ
1. 文字列(String)でよく使うプロパティ
テキスト入力のチェックや、APIから取得したテキストの判定で必須になります。
isEmpty / isNotEmpty
文字列が空文字('')かどうかを判定します。この場合ではusernameが空ではないためelse if が実行されます。
void main(){
String username = 'e';
if (username.isEmpty) {
print('ユーザー名を入力してください');
}
else if (username.isNotEmpty) {
print('ウェルカム、 $username さん!');
}
}2. コレクション(List, Map, Set)でよく使うプロパティ
データのリストを表示する際、データが0件のときと1件以上あるときで画面(Widget)を切り替えるのに多用します。
isEmpty / isNotEmpty
リストやマップの中に要素があるかどうかを判定します。この場合はListに何も代入されていないためif文が実行されます。
void main(){
List<String> cart = [];
if (cart.isEmpty) {
print('カートは空です');
}
}length
要素の「個数」(長さ)を返します。件数以上・以下で分岐させたい場合に使用します。
void main(){
List<String> cartItems = ['商品A', '商品B', '商品C'];
if (cartItems.length >= 5) {
print('商品が多すぎます。');
}
else if (cartItems.length ==3) {
print('商品は3つです。');
}
}3. 数値(int, double)でよく使うプロパティ
数値の性質を判定したいときに便利です。% 2 == 0(偶数判定)などを書かずに済みます。
isEven / isOdd (intのみ)
数値が「偶数(isEven)」か「奇数(isOdd)」かを判定します。この場合だと、xが4なので偶数になります。
void main(){
int x = 4;
if (x.isEven) {
print('偶数です。');
}
}isNegative
数値が「マイナス(負の数)」かどうかを判定します。
void main(){
double x = -2000.0;
if (x.isNegative) {
print('残高が不足しています。');
}
}4. 【応用】Null安全(Nullable)と組み合わせるプロパティ
Dartでは、値が null になる可能性のある変数(String? や List? など)に対してそのままプロパティを呼ぶとエラーになります。そのため、if の中では以下のような書き方が定番です。
オプショナルチェイニング ?. と ヌル合体 ??
「データが null 、または空っぽのとき」という条件は、よく書く if のパターンです。Dartでもオプショナルチェイニング ?. と ヌル合体 ??演算子がつかえます。
void main(){
String? message = null; // nullの可能性がある変数
// messageが null、または空文字なら true
if (message?.isEmpty ?? true) {
print('エラーはありません。正常です。');
}
// 逆に、nullでもなく、空文字でもない(=ちゃんとエラー文字が入っている)とき
else if (message?.isNotEmpty ?? false) {
print('エラーが発生しました: $message');
}
}まとめ:よく使う組み合わせ一覧
| 型 | プロパティ | よくある if の条件式の形 | 用途 |
| String | isEmpty | if (text.isEmpty) | 未入力チェック |
| List | isEmpty | if (items.isEmpty) | データが0件のときの画面切り替え |
| List | length | if (items.length > 10) | 件数制限のチェック |
| int | isEven | if (index.isEven) | リストの偶数行・奇数行の判定 |
| 共通 | == null | if (data == null) | データが取得できなかった時の処理 |
ネストした文
条件が複数ある場合配下の通りです。
void main()
{
int age = 18;
if (age<20) {
if (age ==18) {
print ("adult");
//条件1と2がクリアされた場合に表示
}
}
}&&(アンド)を使用する場合
void main() {
int x = 5;
int y = 10;
if (x > 0 && y > 0) {
print("xとyはどちらも正の数です");
} else {
print("少なくとも一方が正の数ではありません");
}
}この例では、xとyがどちらも正の数である場合に最初の条件が満たされます。
||(or)を使用する場合
void main() {
int age = 25;
if (age < 18 || age >= 65) {
print("未成年または高齢者です");
} else {
print("成人かつ中年です");
}
}リストに特定の要素が含まれているか判定するプロパティ
リストに要素が含まれているかどうかを判定するには、containsメソッドを使用します。
void main() {
List<int> myList = [1, 2, 3, 4, 5];
// 2がリストに含まれているか判定
if (myList.contains(2)) {
print("2はリストに含まれています");
} else {
print("2はリストに含まれていません");
}
// 6がリストに含まれていないか判定
if (!myList.contains(6)) {
print("6はリストに含まれていません");
} else {
print("6はリストに含まれています");
}
}
switch文との違い
「〇〇以上」「〇〇かつ〇〇」など、数字の範囲や複雑な条件で判定したいときにif文を使います。
個人的なサンプル
// 1. ここがプログラムのスタート地点
void main() {
print('--- テストの合否判定スタート ---');
// Aさんの場合(文字列の '85' を渡してみる)
String resultA = checkPassFromString('85');
print('Aさんの結果: $resultA'); // 出力: Aさんの結果: 合格
// Bさんの場合(文字列の '50' を渡してみる)
String resultB = checkPassFromString('50');
print('Bさんの結果: $resultB'); // 出力: Bさんの結果: 不合格
}
// 2. あなたが作った合否を判定するメソッド
String checkPassFromString(String scoreStr) {
// 文字列の '85' を 数字の 85 に変換する
int score = int.parse(scoreStr);
if (score >= 70) {
return '合格';
} else {
return '不合格';
}
}
