今回は何番煎じだという感じではありますが、Dartの基礎構文を僕が僕のために書き殴っていきます。
構文のサンプルコードをその都度用意しているので、それをコピペして実際に下記URLのDartPadで動きを確認しながら見てもらうのがおすすめです。
目次
Hello World
void main() {
print("Hello, world!");
}
// 結果 -----------------------------------
Hello, world!
Dartでは最初に実行するコードはmain関数の中に記述します。
print関数を使うことでコンソール上に文字列を出力できます。
コメント
// コメント
/*
複数行コメント
できるよ
*/
コメントはプログラムとして処理されないので、コードに対するメモだったりtodoを残したい時に便利です。
変数
void main() {
------------------------------------------------------------
int seisuu = 5; // 整数
double syousuu = 3.7; // 小数
String moji = "yuto"; // 文字列 ダブルクォーテーション
String moji = 'yuto'; // 文字列 シングルクォーテーション
bool tf = true; // もしくはfalse
------------------------------------------------------------
// varは最初の代入時に型推論で型が確定するので後から代入で型の変更はできない。
var a = 123;
a = "あああああああ"; // エラー
------------------------------------------------------------
// dynamicは全ての型を代入できる。
dynamic nandemo = 123;
b = 45.6;
b = "なんでも入る";
------------------------------------------------------------
// finalは一度代入したら値の変更を不可にする
final c = 123;
c = 456; // エラー
c = "yuto"; // エラー
------------------------------------------------------------
// constはコンパイル時に値の変更を不可にする。finalの強いバージョンみたいなやつ
const d = 123;
d = 456; // エラー
d = "yuto"; // エラー
}
条件分岐
if文
void main() {
var a = 1;
print("----- if文 -----");
if (a < 1) {
print("おはよう");
} else if (a < 2) {
print("こんにちは");
}else{
print("こんばんは");
}
}
// 結果 -----------------------------------
----- if文 -----
こんにちは
switch文
void main() {
var a = 1;
print("----- switch文 -----");
switch(a){
case 0:
print("おはよう");
break;
case 1:
print("こんにちは");
break;
default:
print("こんばんは");
break;
}
}
// 結果 -----------------------------------
----- switch文 -----
こんにちは
リスト
void main() {
print("----- リスト -----");
var names = ["Pochi", "Taro", "Jiro", "Shiro"];
print(names);
print(names[1]);
print("----- 空のリスト -----");
var list1 = <int>[];
list1.add(123);
list1.add(456);
list1.add(789);
list1[1] = 999;
print(list1);
// 他のリストの書き方
var list2 = List<int>();
List<int> list3 = []
}
セット
void main() {
print("----- セット -----");
var set1 = {"Pochi", "Taro", "Jiro", "Shiro"};
set1.add("Hachi");
print(set1);
set1.add("Pochi");
print(set1);
print("----- 空のセット -----");
Set set2 = {};
set2.add("Tama");
print(set2);
}
MAP
void main() {
print("----- Map -----");
var map1 = {"Pochi":5,
"Taro":4,
"Jiro":12,
"Shiro":3};
print(map1);
print(map1["Taro"]);
map1["Taro"] = 10;
map1["Hachi"] = 7;
print(map1);
print("----- 空のMap -----");
var map2 = {};
map2["Tama"] = 9;
print(map2);
}
繰り返し
for文
void main() {
print("----- for文 -----");
// (変数を初期化; 条件式; 増加式;)
for (int i = 0; i < 10; i++) {
print(i);
}
// 結果 -----------------------------------
----- for文 -----
0
1
2
3
4
5
6
7
8
9
拡張for文
void main() {
print("----- 拡張for文 -----");
var names = ["Pochi", "Taro", "Jiro", "Shiro"];
for (var name in names) {
print(name);
}
// 結果 -----------------------------------
----- 拡張for文 -----
Pochi
Taro
Jiro
Shiro
拡張for文はリストの中身を一つ一つ取り出してループします。
while文
void main() {
print("----- while文 -----");
int i = 0;
while (i < 10) {
// iが5になったらループを抜ける
if(i == 5) {
print('break!!');
break;
}
print(i);
i++;
}
}
// 結果 -----------------------------------
----- while文 -----
0
1
2
3
4
break!!
while文は条件式がTrueになる限り永遠にループし続けるので、使う際には無限ループに陥らない様に気をつけましょう。意図的にループを抜ける際はbreak文を入れます。
関数
// 先頭に返り値の型を書く
// 返り値が無い場合は先頭にvoidと書く
void add(int a, int b) {
print(a + b);
}
void main() {
// 関数呼び出し
add(2, 3);
}
// 結果 -----------------------------------
5
関数の中身が1行だけなら略記が可能
/*
int add(int a, int b) {
a + b;
}
*/
// ↑の関数は中身が1行だけなので略記ができる。returnも省略できる。
int add(int a, int b) => a + b;
void main() {
print(add(2, 3));
}
// 結果 -----------------------------------
5
[]で囲まれた引数は省略が可能
// []で囲まれた引数は省略可能 省略された場合はnullが入る
int add(int a, int b, [int c, int d]) {
int result = a + b;
if (c != null) result += c;
if (d != null) result += d;
return result;
}
void main() {
print(add(1, 2, 3));
}
// 結果 -----------------------------------
6
{}で囲まれた引数は呼び出し時に変数名を指定する
// { }で囲まれた引数は、呼び出し時に変数名を指定する(省略可能)
int add(int a, int b, {int c, int d}) {
int result = a + b;
if (c != null) result += c;
if (d != null) result += d;
return result;
}
void main() {
print(add(1, 2, c:3));
}
// 結果 -----------------------------------
6
クラス
// クラスはclassの記述から始まる
class Cat1 {
// メンバ変数
String name;
// コンストラクタ
Cat1(String name) {
this.name = name;
}
// メソッド
String sayName(){
return "I'm $name.";
}
}
class Cat2 {
// メンバ変数
String name;
int age;
String message;
// コンストラクタ(略記)
Cat2(this.name, this.age);
// セッター
set greeting(String text) => message = "$name: $text";
// ゲッター
String get introduction => "Name: $name\nAge:$age\n$message";
}
void main() {
print("----- Cat1クラス -----");
Cat1 neko1 = Cat1("Tama");
print(neko1.sayName());
print("----- Cat2クラス -----");
Cat2 neko2 = Cat2("dora", 12);
neko2.greeting = "Bowwow!";
print(neko2.introduction);
// 結果 -----------------------------------
----- Cat1クラス -----
I'm Tama.
----- Cat2クラス -----
Name: dora
Age:12
dora: にゃおん
継承
class Cat {
String name;
// コンストラクタ
Cat(this.name);
void sayName(){
print("I'm $name.");
}
}
// クラスの継承
class Tama extends Cat {
int age;
// コンストラクタ
Tama(String name, int age) : super(name){
this.age = age;
}
void sayAge(){
print("$name: $age");
}
}
void main() {
print("----- クラスの継承 -----");
Tama nuko = Tama("nuko", 7);
nuko.sayName(); // 親クラスのメソッド
nuko.sayAge();
}
// 結果 -----------------------------------
----- クラスの継承 -----
I'm nuko.
nuko: 7
おわりに
以上、Dartの基本的な文法を解説してきました。
今回取り上げた文法さえ覚えてしまえばFlutterで開発する時そこまで困る事はないと思います。
これら以外にもまだ便利な文法はたくさん存在するので気になったら是非調べてみてください。
おわり