【Dart】Flutter入門のためのDart基礎文法学習ガイド

Flutterでアプリ開発を始めるためのDart基礎文法学習ガイドです。各テーマごとに解説ページのリンクを載せているので詳細はリンク先で確認できます。

スポンサーリンク

main関数

main関数とは、Dartのプログラムを実行した際、最初に呼び出される関数です。全てのプログラムはmain関数を通して実行されます。

>>【Flutter/Dart】main関数とrunApp関数とは?

//定義
void main(){
  (実行したい処理)
}
//例
void main() {
  print('Hello World');
}

print関数

print関数を使えば、指定した文字列、数字(または変数)を出力できます。

//定義
print(出力したい文字列や数字);
//例
void main(){
  String greeting = 'Hello World';
  print(greeting);
}

//出力
//Hello World

変数

基本的な変数の種類

  • int型:整数値
  • double型:実数
  • String型:文字列
  • boolean型:真偽値(true/false)
  • List型:複数のvalueを格納できる(同じvalueを格納できる)
  • Set型:複数のvalueを格納できる(同じvalueを格納できない)
  • Map型:valueにkeyを紐づけ、複数のvalueを格納できる

>>【Flutter/Dart】変数の種類と使い方|型と宣言

int型 

//定義
int 変数名 = int型のvalue;

//例
int number = 100;

double型

//定義
double 変数名 = double型のvalue;

//例
double number = 1.2;

String型

//定義
String 変数名 = String型のvalue;

//例
String greeting = 'Hello World'; // ''の中に文字列を書く

boolean型

//定義
bool 変数名 = boolean型のvalue(true/false);

//例
bool over18 = true;
bool gameOver = false;

List型

>> 【Flutter/Dart】Listの基本的な使い方

//定義
List<型> 変数名 = [宣言した型のvalue];

//例
List<String> names = ['Alex', 'Brian', 'Charlie'];

Set型

>> 【Flutter/Dart】Setの基本的な使い方

//定義
Set<型> 変数名 = {宣言した型のvalue};

//例
Set<String> names = {'Alex', 'Brian', 'Charlie'};

Map型

>> 【Flutter/Dart】Mapの基本的な使い方

//定義
Map<keyの型, valueの型> 変数名 = {宣言したkeyの型のvalue, 宣言したvalueの型のvalue}

//例
Map<String, int> ages = {'Alex': 24, 'Brian': 18, 'Charlie': 32};

定数(final/const)

final修飾子またはconst修飾子を使えば定数を宣言できます。

>>【Flutter/Dart】finalとconstの区別と使い方|定数の宣言

//宣言
final 型 変数名 = value;
const 型 変数名 = value;


//例
final int num1 = 1;
const int num2 = 2;
スポンサーリンク

関数

  • void型関数(戻り値のない関数)
  • 戻り値のある関数
  • キーワード引数を持つ関数
  • アロー関数

>>【Flutter/Dart】関数の使い方|戻り値/キーワード引数/アロー関数

void型関数(パラメータなし)

//定義
void 関数名(){
 (実行したい処理)
}
//例
main() {
  greeting(); //関数の呼び出し
}

void greeting() {
  print('Hello World');
}

//出力
//Hello world

void型関数(パラメータあり)

//定義
void 関数名(パラメータ) {
 (実行したい処理)
}
//例
main() {
  add(3, 5); //関数の呼び出し
}

void add(int num1, int num2) {
  int total = num1 + num2;
  print(total);
}

戻り値のある関数(パラメータなし)

//定義
戻り値の型 関数名(){
 (実行したい処理)
  return 戻り値;
}

//関数の呼び出し方 & 戻り値の受け取り方
戻り値の型 オブジェクト名 = 関数名();
//例)
main() {
  String hello = greeting(); //関数の呼び出し
  print(hello);
}

String greeting() {
  return 'Hello World';
}

//出力
//Hello World

戻り値のある関数(パラメータあり)

//定義
戻り値の型 関数名(パラメータ) {
 (実行したい処理)
  return 戻り値;
}

//関数の呼び出し方 & 戻り値の受け取り方
戻り値の型 オブジェクト名 = 関数名(引数);
//例)
main() {
  int total = add(5, 10);
  print(total);
}

int add(int num1, int num2) {
  int total = num1 + num2;
  return total;
}

//出力
//15

キーワード引数をもつ関数

//定義
戻り値の型 関数名({パラメータ}) {
 (実行したい処理)
}

//キーワード引数の関数の呼び出し方
関数名(パラメータ:引数);
//例)
main() {
  add(num1: 5, num2: 10);
  add(num2: 1, num1: 2);
}

void add({int num1, int num2}) {
  int total = num1 + num2;
  print(total);
}

//出力
//15
//3

パラメータに初期値を指定

//定義
戻り値の型 関数名({パラメータ = 初期値}) {
 (実行したい処理)
}
//例)
main() {
  add(num1: 5); //num1=5, num2=2
  add(num2: 10); //num1=1, num2=10
  add(); //num1=1, num2=2
}

void add({int num1=1, int num2=2}) {
  int total = num1 + num2;
  print(total);
}

//出力
//7
//11
//3

アロー関数

アロー関数は、関数で定義したいコードを1行でまとめられる際に使用できます。

//定義(void型)
void 関数名() => 実行したい処理;

//(戻り値のある場合)
戻り値の型 関数名() => 実行したい処理;
//例)
main() {
  greeting();
  int total = add(num1: 5, num2: 10);
  print(total);
}

void greeting() => print('Hello World');
int add({int num1, int num2}) => num1 + num2;

//出力
//Hello World
//15

コールバック関数/無名関数

無名関数はコールバック関数に使用します。

>>【Flutter/Dart】コールバック関数と無名関数の使い方

//定義(引数なし)
(){ 
  (実行したい処理) 
}

//定義(引数あり)
(引数){ 
  (実行したい処理) 
}

演算子

  • 算術演算子:+, -, *, /, ~/, %, ++, –
  • 代入演算子:+=, -=, *=, /=, ~/=, %=
  • 比較演算子:>, >=, ==, <, <=, !=
  • 論理演算子:&&, ||, !
  • 型テスト演算子:is, is!
  • 三項演算子:(条件)?真の場合の処理:偽の場合の処理;

>>【Flutter/Dart】演算子の種類と使い方

算術演算子

//足し算
print(5 + 1); // 6

//引き算
print(5 - 1); // 4

//掛け算
print(5 * 2); // 10

//割り算
print(5 / 2); // 2.5

//割り算(小数点以下を切り捨て)
print(5 ~/ 2); // 2

//余り
print(5 % 2); // 1
// ++を変数の頭につける場合
int num = 5;
print(++num); // 6
print(num); // 6

// ++を変数の尻尾につける場合
num = 5;
print(num++); // 5
print(num); // 6

// --を変数の頭につける場合
num = 5;
print(--num); // 4
print(num); // 4

// --を変数の尻尾につける場合
num = 5;
print(num--); // 5
print(num); // 4

代入演算子

main() {
  //加算して代入
  int num = 5;
  num += 1;
  print(num); // 6

//減算して代入
  num = 5;
  num -= 1;
  print(num); // 4

//乗算して代入
  num = 5;
  num *= 2;
  print(num); // 10

//除算して代入
  double num2 = 5;
  num2 /= 2;
  print(num2); // 2.5

//除算して代入(小数点以下を切り捨て)
  num = 5;
  num ~/= 2;
  print(num); // 2

//剰余して代入
  num = 5;
  num %= 2;
  print(num); // 1
}

比較演算子

void main() {
  // A > B(AがBより大きい:true)
  print(5 > 1); // true

// A >= B(AがB以上:true)
  print(5 >= 1); // true

// A == B(AとBが等しい:true)
  print(5 == 1); // false

// A <= B(AはB以下:true)
  print(5 <= 1); // false

// A < B(AはBより小さい:true)
  print(5 < 1); // false

// A != B(AとBは異なる:true)
  print(5 != 1); // true
}

論理演算子

void main() {
  // A && B(A=trueかつB=true => true)
  print(true && true); // true
  print(true && false); // false
  print(false && false); // false

// A || B(A=trueまたはB=true => true)
  print(true || true); // true
  print(true || false); // true
  print(false || false); // false

// !A(Aがfalse => true)
  print(!false); // true
  print(!true); // false
}

型テスト演算子

void main() {
// A is type(Aの型がtypeで指定した型と同じ:true)
  int num = 10;
  print(num is int); // true
  print(num is String); // false

// A is! type(Aの型がtypeで指定した型と異なる:true)
  print(num is! int); // false
  print(num is! String); // true
}

三項演算子

void main() {
  //(条件式)?真の場合の処理:偽の場合の処理;
  int num = 8;
  (num >= 5) ? print('5以上') : print('5より下'); // 5以上
}
スポンサーリンク

条件分岐

  • if文
  • if-else文
  • else if
  • switch文
  • 三項演算子

>>【Flutter/Dart】条件分岐の使い方|if/switch/三項演算子

if文

1つの条件に対し、1つの処理を実行するか否か指定できます。

//定義
if(条件式){
  (実行したい処理)
}
//例
void main() {
  //条件が真の場合
  int number = 10;
  if (number >= 5) {
    print('5以上');
  } 

  //条件が偽の場合
  number = 1;
  if (number >= 10) {
    print('10以上');
  } 
}

//出力
//5以上

if-else文

1つの条件に対し、真と偽それぞれに対して実行したい処理を指定できます。

//定義
if(条件式){
  (真の時に実行したい処理)
}
else{
  (偽の時に実行したい処理)
}
//例
void main() {
  //条件が真の場合
  int number = 10;
  if (number >= 5) {
    print('5以上');
  } 
  else {
    print('5より下');
  } 

  //条件が偽の場合
  number = 1;
  if (number >= 5) {
    print('10以上');
  } else {
    print('10より下');
  } 
}

//出力
//5以上
//10より下

else if

複数の条件に対し、処理を実行するか否か指定できます。

//定義
if(条件式A){
  (実行したい処理)
}
else if(条件式B){
  (実行したい処理)
}
else if(条件式C){
  (実行したい処理)
}
else{
  (実行したい処理)
}
//例
void main() {
  int number = 3;
  if (number >= 10) {
    print('10以上');
  } else if (number >= 5) {
    print('5以上');
  } else if (number >= 0) {
    print('0以上');
  } 
  else {
    print('0より下');
  }
}

//出力
//0以上

switch文

式の評価(値)が3つ以上に枝分かれする際の条件分岐に使用します。

//定義
switch(式){
  case 値A:
    (実行したい処理)
    break;
  case 値B:
    (実行したい処理)
    break;
  case 値C:
    (実行したい処理)
    break;
  default:
    (実行したい処理)
    break;  
}
//例
void main() {
  String fruit = 'banana';
  switch (fruit) {
    case 'apple':
      print('リンゴ');
      break;
    case 'banana':
      print('バナナ');
      break;
    case 'grape':
      print('ぶどう');
      break;
    default:
      print('リンゴ、バナナ、ぶどう以外');
      break;
  }
}

//出力
//バナナ

三項演算子

if-else文を1行のコードで表せます。

//定義
(条件式)?真の場合の処理:偽の場合の処理;
//例
void main() {
  int num = 8;
  (num >= 5) ? print('5以上') : print('5より下'); 
}

//出力
//5以上

反復処理

  • for文
  • for-in文
  • forEach文
  • while文
  • do-while文
  • break文
  • continue文

>>【Flutter/Dart】Loopの種類と使い分け|for文/while文/break文/continue文

>>【Flutter/Dart】for文の使い方|for/for-in/forEach

>>【Flutter/Dart】while文の使い方|while/do-while

>>【Flutter/Dart】breakとcontinueの使い方

for文

//定義
for(初期化式; 条件式; 変化式){
  (実行したい処理)
}
//例
void main() {
  for (var i = 0; i < 10; i++) {
    print(i);
  }
  print('ループから脱出');
}

// 0~9 が順に出力された後に「ループから脱出」が出力

for-in文

//定義
for (var 変数 in List/Set){
  (実行したい処理)
}
//例(Listの場合)
void main() {
  List<String> mixFruit = ['apple', 'banana', 'grape', 'orange'];
  for (var fruit in mixFruit) {
    print(fruit);
  }
  print('Loopから脱出');
}

//「apple」「banana」「grape」「orange」「Loopから脱出」の順に出力

forEach文(List/Setの場合)

//定義
List/Set名.forEach((変数){
    (実行したい処理)
  }
)
//例(Listの場合)
List<String> mixFruit = ['apple', 'banana', 'grape', 'orange'];

mixFruit.forEach((fruit){
    print(fruit);
  }
);
print('Loopから脱出');

 //「apple」「banana」「grape」「orange」「Loopから脱出」の順に出力

forEach文(Mapの場合)

//定義
List/Set名.forEach((変数key,変数value){
    (実行したい処理)
  }
)
//例
void main() {
  Map<String, int> ages = {
    'Alex': 18,
    'Ben': 15,
    'Charlie': 25,
  };
  ages.forEach((name, age) {
    print("${name} is ${age} years old");
  });
  print('Loopから脱出');
}

//出力
//Alex is 18 years old
//Ben is 15 years old
//Charlie is 25 years old
//Loopから脱出

while文

//定義
while(条件式){
  (実行する処理)
}
//例
void main() {
  int num = 0;
  while (num < 5) {
    print(num);
    num++;
  }
  print('ループから脱出');
}

// 0~4 が順に出力された後に「ループから脱出」が出力

do-while文

do{
  (実行する処理)
}while(条件式)
//例
void main() {
  int num = 0;
  do {
    print(num);
    num++;
  } while (num < 5);
  print('ループから脱出');
}

// 0~4 が順に出力された後に「ループから脱出」が出力

break文

//定義(for文の場合)
for(初期値;条件式;変化式){
  ...
  if(条件式){
    ...
    break;
  }
  ...
}
//例
void main() {
  for (var i = 0; i < 10; i++) {
    if (i == 5) {
      break;
    }
    print(i);
  }
}

// 1~4 が順に出力

continue文

//定義(for文の場合)
for(初期値;条件式;変化式){
  ...
  if(条件式){
    ...
    continue;
  }
  ...
}
//例
void main() {
  for (var i = 0; i < 10; i++) {
    if (i % 2 == 0) {
      continue;
    }
    print(i);
  }
}

// 1,3,5,7,9 が順に出力
スポンサーリンク

例外処理

  • try-on文:1つのExceptionに対して有効
  • try-catch文:複数のExceptionに対して有効
  • try-on-catch文:try-on文とtry-catch文の複合処理
  • throw:Exceptionを意図的に発生させる
  • finally:Exceptionの発生の有無に関わらず例外処理の最後に必ず実行

>>【Flutter/Dart】例外処理の使い方|try/on/catch/e/throw/finally

try-on文

//定義
try{
  (Exceptionが発生する可能性のある処理)
}on Exception名{
  (指定したExceptionが発生した時の処理)
}
//例
void main() {
  String words = 'Hello World';
  try{
    print(int.parse(words));
  }on FormatException{
    print('FormatException 発生');
  }
}

//出力
//FormatException 発生

try-catch文

//定義
try{
  (Exceptionが発生する可能性のある処理)
}catch(e){
  (指定したExceptionが発生した時の処理)
}
//例
void main() {
  String words = 'Hello World';
  try{
    print(int.parse(words));
  }catch(e){
    print(e);
    print('tryブロックでException 発生');
  }
}
//出力
//FormatException: Hello World <= print(e)によって出力
//tryブロックでException 発生

try-on-catch文

//定義
try{
  (Exceptionが発生する可能性のある処理)
}on{
  (指定したExceptionが発生した時の処理)
}catch(e){
  (指定したExceptionが発生した時の処理)
}
//例
void main() {
  String words = 'Hello World';
  try{
    print(int.parse(words));
  }on FormatException{
    print('FormatException 発生');
  }catch(e){
    print(e);
    print('tryブロックでException 発生');
  }
}
//出力
//FormatException 発生

throw

//定義
try{
  ...
  throw 'エラー文を指定' //if文などで使われる
  ... 
}catch(e){
  print(e) //throwで指定したエラー文が出力
  (指定したExceptionが発生した時の処理)
}

tryブロックで直接throwを使う場合

//例
void main() {
  int number = 100;
  try{
    if(number > 50){
      throw '50よりも大きい';
    }
    print(number); //throwが実行されたら実行されない
  }catch(e){
    print(e); //throwで指定したエラー文が出力
    print('カスタムExceptionが発生');
  }
}

//出力
//50よりも大きい
//カスタムExceptionが発生

関数で間接的にthrowを使う場合

//例
void main() {
  int number = 100;
  try{
    greaterThan50(number);
    print(number); //throwが実行されたら実行されない
  }catch(e){
    print(e); //throwで指定したエラー文が出力
    print('カスタムExceptionが発生');
  }
}

void greaterThan50(int num){
  if(num > 50){
      throw '50よりも大きい';
  }
}

//出力
//50よりも大きい
//カスタムExceptionが発生

finally

//定義
try{
  (Exceptionが発生する可能性のある処理)
}catch(e){
  (指定したExceptionが発生した時の処理)
}finally{
  (例外処理の最後に実行したい処理)
}
//例
void main() {
  String words = 'Hello World';
  try{
    print(int.parse(words));
  }catch(e){
    print(e);
    print('tryブロックでException 発生');
  }finally{
    print('finallyで処理実行');
  }
}

//出力
//tryブロックでException 発生
//finallyで処理実行

クラスの基本

  • プロパティ
  • コンストラクタ
  • メソッド

>>【Flutter/Dart】クラスの基本 Part1|プロパティ/コンストラクタ/メソッド 

//例
void main() {
  Car car = Car(doors: 4, members: 6);
  print(car.doors);
  print(car.members);
  car.drive();
}

class Car {
  //プロパティ
  int doors;
  int members;

  //コンストラクタ
  Car({int doors, int members}) {
    this.doors = doors;
    this.members = members;
  }

  //メソッド
  void drive() {
    print('I am driving');
  }
}

//出力
//4
//6
//I am driving

クラスの継承

  • extends
  • super
  • @override

>>【Flutter/Dart】クラスの継承 Part2|extends/super/@override

//例
main() {
  SportCar sport_car = SportCar(doors: 4);
  print(sport_car.parentDoors);
  sport_car.model();
}

//親クラスの定義
class Car {
  int parentDoors;
  Car({this.parentDoors}) {}

  void model() {
    print('It is a family car.');
  }
}

//子クラスの定義
class SportCar extends Car {
  SportCar({int doors}) : super(parentDoors: doors) {}

  @override //親クラスの「modelメソッド」を上書き
  void model() {
    print('It is a sport car');
  }
}

//出力
//4
//It is a sport car

クラスの拡張

  • mixin

>>【Flutter/Dart】クラスの拡張 Part3|mixin

//クラスを拡張
class クラス名 with クラス名A, クラス名B{ ... }

//mixinの定義
mixin クラス名A{ ... }
mixin クラス名B{ ... }
//例
void main() {
  Dog dog = Dog();
  dog.walk(); //「I can walk」が出力
  dog.eat(); //「I can eat」が出力
}

//mixinでクラスを拡張
class Dog with Walk, Eat{}

//mixinの定義A
mixin Walk{
  void walk(){
    print('I can walk');
  }
}

//mixinの定義B
mixin Eat{
  void eat(){
    print('I can eat');
  }
}

//出力
//I can walk
//I can eat

Future

>>【Flutter/Dart】Futureの基本的な使い方|非同期処理 part1

//例
void main() {
  greeting().then((value) {
    print('thenメソッドで処理中...');
    print(value);
  });
}

Future<String> greeting() {
  return Future.delayed(Duration(seconds: 3), () {
    print('greetingで処理中...');
    return 'Hello World';
  });
}

//出力
//greetingで処理中...
//thenメソッドで処理中...
//Hello World

async/await

>>【Flutter/Dart】async/awaitの使い方|非同期処理 part2

//定義
//void型
void 非同期関数名() async{

  await 非同期処理;
  .....
  型 オブジェクト名 = await 戻り値を持つ非同期処理;
  .....
};

//future(戻り値)のある場合
Future<型> 非同期関数名() async{
  await 非同期処理;
  .....
  型 オブジェクト名 = await 非同期処理;
  .....
  return 戻り値;
};
//例
void main() async {
  String value1 = await task1();
  String value2 = await task2(value1);
  task3(value2);
}

Future<String> task1() {
  return Future.delayed(Duration(seconds: 3), () {
    print('task1で処理中...');
    return 'Hello World';
  });
}

Future<String> task2(String value) {
  return Future.delayed(Duration(seconds: 3), () {
    print('task2で処理中...');
    return value;
  });
}

void task3(String value) {
  print('task3で処理中...');
  print(value);
}

//出力
//task1で処理中...
//task2で処理中...
//task3で処理中...
//Hello World

参考

タイトルとURLをコピーしました