Chapter 05

Chapter2: Dart

heyhey1028
heyhey1028
2023.02.22に更新

Dart とは

Flutter の使用言語である Dart とは Google が 2011 年にリリースしたオープンソースのプログラミング言語です。Javascript の代替言語として開発され、もともとは Web アプリケーション用の言語として開発されましたが、Google の一部サービスで使われるに留まり長らく脚光を浴びる事がありませんでした。しかし Flutter の言語として採用された事で一気に注目が集まり、2021 年に発表された Stack Overflow の「最も愛されているプログラミング言語」では 7 位を獲得しています。

Flutter の使用言語である事からフロントエンドに特化した言語と思われがちですが、コマンドラインツールやバックエンドの開発も行うことが出来る汎用性の高いプログラミング言語です。

Dart の特徴

Dart は以下の2つの特徴を持っています。

1.静的型付け言語である

「静的型付け言語」とはプログラム作成の時点で、1つ1つの変数にどんなデータ型なのかを記述する必要があるプログラミング言語です。

JavascriptPythonのように変数に型定義を記述する必要がない「動的型付け言語」に対し、JavaTypescriptなどが「静的型付け言語」に入ります。Dartはこの「静的型付け言語」に入ります。

例えば文字はString、数字はintというデータ型となり、String型の引数を受け取るメソッドに対し、int型のデータを渡す事は出来ません。

final int number = 10;
final String kazu = '10';

void myFunction(int data){
    // do something
}

void main(){
    myFunction(int); // OK
    myFunction(kazu); // NG
}

「静的型付け言語」は型定義を徹底する事でプログラム実行時のエラーを最小限に抑える事が出来ます。

実は動的型付けも出来る

ただ Dart でもdynamicというキーワードを使う事で変数に対し動的型付けを行う事も出来ます。

先ほどの例で言えば、dynamicな引数に受け取るメソッドであればどんな型のデータでも渡す事が出来ます。

final int number = 10;
final String kazu = '10';

void myFunction(dynamic data){
    // do something
}

void main(){
    myFunction(int); // OK
    myFunction(kazu); // OK
}

また Dart は静的型付け言語でありながら、強力な型推論エンジンも搭載している為、型自体の定義はオプショナルです。実は定義しなくてもコンパイルエラーとはなりません。

final number = 10; // OK
final kazu = '10'; // OK

ですが、どんな型のデータが渡されるか分からないという事はそれだけエラーが発生する可能性が上がる事を意味するので、必要最小限に抑えておくことが重要です。

2.オブジェクト指向言語である

オブジェクト指向言語(OOP)」とはオブジェクトを中心としたプログラミング言語で、オブジェクトの抽象化や継承の機能を備えた言語の事です。

JavaJavascriptPythonなど多くのメジャーなプログラミング言語がオブジェクト指向言語に含まれます。Dartはこれらと同じくオブジェクト指向言語に入り、オブジェクトの抽象化や継承などの機能を備えています。

// スーパークラスを定義する
class Vehicle {
  String model;

  Vehicle(this.model);

  void start() {
    print('Vehicle $model has started!');
  }
}

// サブクラスを定義する
class Car extends Vehicle {
  int year;

  Car(String model, this.year) : super(model);

  
  void start() {
    print('Car $model has started!');
  }
}

void main(){
  // インスタンスを作成する
  Car car = Car('Toyota', 2019);
  // 継承を使ってスーパークラスとサブクラスのメソッドを呼び出す
  car.start();  // Car Toyota has started!
}

関数型プログラミングの機能も一部備えている

オブジェクト指向言語(OOP)」がオブジェクトを中心に置いたプログラミング言語であるのに対し、関数を中心に置いたプログラミング言語の事を「関数型言語」と呼びます。

HaskellScalaElixirなどが関数型言語に入ります。

Dartは一部関数型プログラミングの機能も備えている為、関数を変数に代入するなど関数を取り回しやすくなっています。

// 関数を定義する
int double(int x) {
  return x * 2;
}

// 関数を実行する
int answer = double(2);
print(answer); // 4

// 関数を別の変数に代入する
Function myFunction = double;

// 関数を実行する
int result = myFunction(3);
print(result); // 6

次の章に行く前に

次の章からDartの基本的な文法を学んでいきます。実際に手を動かしていくことで学びが深まるので是非実際にコードを書いて実行してみてほしいと思います。

Dart のコードをお手軽に試す事が出来る Dartpad というサービスがあるので是非ともそちらにコードを書いて確かめながら読み進めていってください。

https://dartpad.dev/

また上記のコードサンプルにも何度か登場していますが、print 関数を使うことでコンソールに文字列を出力することが出来るので、実行結果を出力しながら色々と実験してみていただければと思います。

それでは早速Dartの基本的な文法を学んでいきましょう!🚀