Dart
Dartは、オブジェクト指向のプログラミング言語で、Googleによって開発されました。Dartは、Webアプリケーションやモバイルアプリケーションの開発に適しており、柔軟性と高速性が特徴です。
このチュートリアルでは、Dartプログラミング言語の基本的な構文と機能について学ぶことができます。初心者から中級者まで、プログラミングのスキルレベルに関わらず、誰でもこのチュートリアルから学習を開始することができます。
Dart について

DartはGoogleによって開発されたオブジェクト指向のプログラミング言語です。Webアプリケーションやモバイルアプリケーションの開発に使用されています。
Dart について

Dartは静的型付けの言語で、ライブラリやフレームワークが豊富に用意されています。FlutterというUIフレームワークもDartで書かれており、Flutterにより、多くの種類のプラットフォーム向けにアプリケーションを開発することができます。
インストールしないで実行する方法

DartPad というサイトを使うと、自分の環境にインストールしないでもブラウザ上で Dart のプログラミングが行なえます。
インストールしないで実行する方法

⇒ https://dart.dev/#try-dart
インストール方法

Get the Dart SDK を入手できます。
インストール方法

Windowsの場合は、公式インストール方法ではパッケージマネージャーの Chocolatey を使うのですが日本では馴染みがないようなので、これとは別にコミュニティによる用意されたインストーラを使うと良いでしょう。⇒ https://gekorm.com/dart-windows/
動作確認

dartのバージョンは、
動作確認

で確認できます。
動作確認

のようにバージョン番号が出たら、成功です。
Hello World など

print関数などのよく使われる関数はdart:coreライブラリにありますが、dart:coreライブラリはimport不要で使えます。
Hello World など

実行方法は、コマンドプロンプトあるいはWindows Terminalで、
Hello World など

です。
Dartに特徴的な機能

Dartが初めてのプログラミング言語という人は少ないでしょうから、他の言語にはあまりないDart固有の機能をまとめて紹介します。
Dartに特徴的な機能

Dartではnull安全性が組み込まれており、変数がnullを許容するかどうかを明示的に指定します。例えば、int型の変数にnullを代入するためにはint?という型を使用します。この機能により、nullに関連するエラーやバグを減らすことができます。
Dartに特徴的な機能

以下は、Dart 2.12で追加されたNull安全性の機能を含んだコードの例です。Null安全性はDartの重要な変更点の一つであり、?や!などの新しい機能が導入されました。
Dartに特徴的な機能

この例では、String? nullableStringというnullableな文字列型変数を宣言し、if文でnullチェックして安全にプロパティにアクセスしています。また、??演算子を使用してnullableな変数がnullの場合の代替値を設定し、!演算子を使ってnullチェックをバイパスして非nullを保証しています。
Dartに特徴的な機能

Dartには他の言語にはあまり見られない、拡張メソッドという機能があります。これにより、既存のクラスに新しいメソッドを追加することができます。
Dartに特徴的な機能

Dartではリストやマップ、セットなどのコレクションを簡潔に初期化するための構文があります。
Dartに特徴的な機能

これにより、コレクションを宣言して初期化する手順を簡素化できます。
Dartに特徴的な機能

クラスのコンストラクタがフィールドの初期化しか行わない場合、{this.field}のような記述でコンストラクタを省略できます。
Dartに特徴的な機能

これにより、フィールドの初期化を簡潔に表現できます。
変数

Dartには整数型や浮動小数型などの型があります。変数の宣言のときに型を明示する方法と、初期化する値から型を推論する方法があります。
変数

Dartでは、型は var 宣言を使うことで型推論させることができます。
文字列への式の埋込み

文字列の中に、式を埋め込むことができます。
文字列への式の埋込み

文字列の中に ${ 式 } の形式で埋込むと、実行時に展開されます。
文字列への変数の埋込み

文字列の中に埋込む式が単一の変数ならばより簡略化した形式で表現できます。
文字列への変数の埋込み

文字列の中に $変数名 の形式で埋込むと、実行時に展開されます。
バックスラッシュ・エスケープ・シーケンス

改行などに対するバックスラッシュ・エスケープ・シーケンスは他のプログラミング言語と同様に使えます。
バックスラッシュ・エスケープ・シーケンス

「\」そのものを表示したい場合は、先頭にもうひとつ「\」をつけて「\\」のようにするだけです。
型

以下は、Dartにおける一般的な型とそれぞれのリテラル例を示した一覧表です。
型

これらはDartでよく使われる基本的な型の一覧です。それぞれの型は異なる種類のデータを表し、リテラル例はその型の値を表す例示です。
型

Dartには、コレクションの要素を特定の条件に基づいて動的に生成するためのgenerateメソッドがあります。これはリストやマップを生成する際に便利な方法です。
型

この例では、List.generateメソッドを使用して、要素数が5個で、各要素がインデックスに2を掛けた値で初期化されたリストを生成しています。
型

generateメソッドの構文は次のようになります。
型

同様に、generateメソッドはマップを生成するためにも使用できます。
型

この例では、0から4までのキーを持ち、それぞれの値が'Value 0'から'Value 4'まで連番になるマップを生成しています。
型

Dartのコレクション(リスト、マップ、セットなど)を操作するために便利なイテレーションメソッドがいくつか用意されています。以下はその一部です。
型

forEach: 各要素に対して特定の処理を行います。
型

map: 各要素を変換して新しいリストを作成します。
型

where: 条件に一致する要素のみをフィルタリングします。
型

reduce: 要素を結合して1つの値に縮約します。
型

forEach: 各エントリー(キーと値のペア)に対して特定の処理を行います。
型

map: キーと値を変換して新しいマップを作成します。
型

keys / values: キーのコレクション / 値のコレクションを取得します。
型

これらのイテレーションメソッドは、コレクションの要素を効果的に操作し、必要な処理を実行するために利用されます。
コメント

コメントをソースコードに書くときは、//や、/*と*/を使用します。
コメント

下記コードのように//を使うと行末までがコメントになります。
コメント

下記コードのように/*と*/で文を囲むと2行以上をコメントにできます。
関数

関数は戻値の型と関数名と仮引数リストで定義します。 関数の呼出しは、関数名と実引数リストを与えます。
関数

このコードでは、add関数とsub関数が定義されています。add関数はxとyの和を計算し、その結果を返します。一方、sub関数はxからyを引いた結果を返します。main関数では、これらの関数を引数を指定して呼び出し、結果を出力しています。
関数

add関数は通常のブロック構文で定義されており、sub関数はアロー構文を使用して短く表記されています。このような表記法は、1行で簡潔に関数を定義する場合に便利です。
ライブラリー

Dartには、様々な用途に特化した多くのライブラリーが存在します。以下は、Dartでよく使用されるライブラリーの一部です。
ライブラリー

これらのライブラリー以外にも、様々な目的に特化したライブラリーが存在しています。Dartの公式ドキュメントや、Dart Pubと呼ばれるパッケージマネージャーで検索することで、必要なライブラリーを見つけることができます。
ライブラリー

print関数などのよく使われる関数はdart:coreライブラリーにあり、dart:coreライブラリーはimportが不要ですが、それ以外のライブラリーはimportが必要です。
ライブラリー

Dartの型システムの説明の前なので、簡単な例の説明に留めました。
制御構造

Dartには、if-else文、for文、while文、do-while文、switch文、forEachメソッドなど、多様な制御構造があります。
制御構造

forEachメソッドは、リストやマップなどのコレクションの各要素に対して指定した処理を実行するためのメソッドです。
制御構造

また、forEachメソッドは、以下のようにラムダ式を使用して簡略化することもできます。
オブジェクト指向プログラミング

Dartはオブジェクト指向言語であり、クラスを使ってオブジェクトを定義できます。クラスはフィールドとメソッドを持ち、フィールドはオブジェクトの状態を表し、メソッドはオブジェクトの振る舞いを定義します。
オブジェクト指向プログラミング

以下は、Dartでクラスを定義し、オブジェクトを作成する例です。例として、Personクラスを定義し、名前と年齢をフィールドに持ち、年齢を1歳増やすメソッドを定義します。また、main関数で2つのPersonオブジェクトを作成し、1つのオブジェクトの年齢を増やして表示します。
オブジェクト指向プログラミング

継承は、既存のクラスを基にして新しいクラスを定義することができます。
コード・ギャラリー

コードの理解はプログラミング言語の学習において重要です。 以下は、動作する簡潔なコード例をいくつかご紹介します。
コード・ギャラリー

エラトステネスの篩を、若干 Dart らしく書いてみました。
コード・ギャラリー

エラトステネスの篩は、効率的な方法で素数を見つけるアルゴリズムであり、指定された範囲の素数を比較的高速に見つけることができます。
コード・ギャラリー

最大公約数と最小公倍数を、若干 Dart らしく書いてみました。
コード・ギャラリー

このDartコードは、与えられた整数の最大公約数(GCD)および最小公倍数(LCM)を計算します。gcd2関数はユークリッドの互除法を使用してGCDを計算し、lcm2関数は G C D ( m , n ) ⋅ L C M ( m , n ) = m ⋅ n {\displaystyle GCD(m,n)\cdot LCM(m,n)=m\cdot n} を利用してLCMを計算します。そして、gcdおよびlcm関数は、与えられた整数リストに対してそれぞれGCDおよびLCMを計算します。main関数では、それらの関数を使用していくつかの計算結果を出力しています。
コード・ギャラリー

二分法を、若干 Dart らしく書いてみました。
コード・ギャラリー

このDartコードは、二分法を使用して与えられた関数の根(ゼロとなる点)を見つけます。bisection関数は、指定された範囲内で与えられた関数fの根を見つけます。main関数では、いくつかの関数を用いて根を見つけるためにbisection関数を呼び出しています。