# Dart 言語の基本
Flutter で使う Dart 言語について勉強中です。
Dart とは
ダートまたはダーツと呼ばれています。
Web アプリやモバイルアプリのクライアント開発向けに設計されたプログラミング言語ですが、Web で生成されたプログラムは SEO の問題で主にモバイルアプリのハイブリッド開発で使われています。
Dart はオブジェクト指向で型推論をサポートしていて Javascript を意識して作られたそうです。
# 変数とデータ型
int整数型double浮動小数点型String文字列型bool論理型
// 整数
int age = 30;
// 浮動小数点数
double height = 1.75;
// 文字列
String name = 'John';
// 論理値
bool isStudent = true;
// 型推論(varを使用)
var city = 'Tokyo'; // Stringと推論される
String 型 のみが最初の文字が大文字で始まる理由
Dart の言語設計上文字列型 String のSは大文字になります。特定の理由は公にはされていませんが、多くのプログラミング言語で文字列型を表すクラスや型は大文字で始まる命名規則を持っていることがあります。他の基本データ型と区別しやすくするためかもしれません。
# コレクション
Dart には List Set Map といったコレクションがあります。
# List
// List
List<String> fruits = ['Apple', 'Banana', 'Cherry'];
fruits.add('Date');
print(fruits); // [Apple, Banana, Cherry, Date]
// 要素の存在を確認
bool containsBanana = fruits.contains('Banana');
print('Contains Banana: $containsBanana'); // Contains Banana: true
Listの結合
List<int> list1 = [1, 2, 3];
List<int> list2 = [4, 5, 6];
// リストの結合
List<int> combined = list1 + list2;
// リストの昇順ソート
combined.sort();
# Map
// Map
Map<String, int> scores = {
'Alice': 90,
'Bob': 85,
'Charlie': 95
};
scores['Dave'] = 80;
print(scores); // {Alice: 90, Bob: 85, Charlie: 95, Dave: 80}
// サイズ取得
int size = scores.length;
print('Size: $size'); // Size: 3
// 要素の削除
scores.remove('Chaarlie')
// 全てのキーを取得
Iterable<String> keys = scores.keys;
print('Keys: $keys'); // Keys: (Alice, Bob, Charlie)
// 全ての値を取得
Iterable<int> values = scores.values;
print('Values: $values'); // Values: (90, 85, 95)
# Set
// Set
void main() {
// リテラルを使ってSetを作成
Set<int> numbers = {1, 2, 3, 4, 5};
print(numbers); // {1, 2, 3, 4, 5}
// 要素の追加
numbers.add(6);
numbers.add(3); // 既に存在するので無視される
// 要素の削除
numbers.remove(2);
print(numbers); // {1, 3, 4, 5, 6}
}
# 非同期
Dart の非同期プログラミングは、Future と async/await を使用します。
Future の基本
Future<void> fetchUserOrder() {
// 2秒後に結果を返す
return Future.delayed(Duration(seconds: 2), () => print('User order fetched!'));
}
void main() {
print('Fetching user order...');
fetchUserOrder();
print('Fetch request sent.');
}
async と await 使って Future が完了するのを待ちます。
void main() async {
print('Fetching user order...');
try {
var order = await fetchUserOrder();
print('User order: $order');
} catch (e) {
print('Error: $e');
}
print('Fetch request sent.');
}
Future<String> fetchUserOrder() {
return Future.delayed(Duration(seconds: 2), () {
throw 'Out of milk!';
});
}
# 複数非同期実行
void main() async {
print('Fetching user orders...');
var orders = await Future.wait([fetchUserOrder1(), fetchUserOrder2()]);
print('User orders: $orders'); // User orders: [Coffee, Tea]
}
Future<String> fetchUserOrder1() {
return Future.delayed(Duration(seconds: 2), () => 'Coffee');
}
Future<String> fetchUserOrder2() {
return Future.delayed(Duration(seconds: 3), () => 'Tea');
}