Dart-programming-quick-guide
Dartプログラミング-概要
Dartは、Cスタイルの構文を持つオブジェクト指向言語であり、オプションでJavaScriptにトランスコンパイルできます。 インターフェイス、クラス、コレクション、ジェネリック、オプションの型指定など、さまざまなプログラミング支援をサポートしています。
Dartは、単一ページのアプリケーションを作成するために広く使用できます。 単一ページのアプリケーションは、WebサイトおよびWebアプリケーションにのみ適用されます。 単一ページのアプリケーションを使用すると、ブラウザーに異なるWebページをロードすることなく、Webサイトの異なる画面間を移動できます。 典型的な例は GMail です。─受信ボックス内のメッセージをクリックすると、ブラウザーは同じWebページに留まりますが、JavaScriptコードは受信ボックスを非表示にし、メッセージ本文を画面に表示します。
Googleは、 Chromium の特別なビルドである Dart VM をリリースしました。 Dartiumを使用すると、他のブラウザでテストする準備ができるまでコードをJavaScriptにコンパイルする必要がなくなります。
次の表は、DartとJavaScriptの機能を比較しています。
Feature | Dart | JavaScript |
---|---|---|
Type system | Optional, dynamic | Weak, dynamic |
Classes | Yes, single inheritance | Prototypical |
Interfaces | Yes, multiple interfaces | No |
Concurrency | Yes, with isolates | Yes, with HTML5 web workers |
このチュートリアルは、Dartプログラミング言語の基本レベルの理解を提供します。
Dartプログラミング-環境
この章では、WindowsプラットフォームでのDartの実行環境の設定について説明します。
DartPadを使用してスクリプトをオンラインで実行する
[[1]] Dartエディターはスクリプトを実行し、HTMLとコンソール出力の両方を表示します。 オンラインエディタには、プリセットコードサンプルのセットが付属しています。
Dartpadでは、より制限的な方法でコーディングすることもできます。 これは、エディターの右下にある[強モード]オプションをチェックすることで実現できます。 強力モードは次の場合に役立ちます-
- より強力な静的および動的チェック
- 相互運用性を高めるための慣用的なJavaScriptコード生成。
Dartpadを使用して次の例を試すことができます
コードは次の出力を表示します
ローカル環境のセットアップ
このセクションでは、ローカル環境のセットアップ方法を見てみましょう。
テキストエディターの使用
いくつかのエディターの例には、Windows Notepad、Notepad ++、Emacs、vim、viなどが含まれます。 編集者は、オペレーティングシステムごとに異なる場合があります。 通常、ソースファイルには拡張子「.dart」が付けられます。
Dart SDKのインストール
Dartの現在の安定バージョンは 1.21.0 です。 dart sdk は次からダウンロードできます-
Dart SDKのインストールのスクリーンショットは以下のとおりです-
SDKのインストールが完了したら、PATH環境変数を次のように設定します-
インストールの検証
Dartが正常にインストールされているかどうかを確認するには、コマンドプロンプトを開き、次のコマンドを入力します-
インストールが成功すると、dartランタイムが表示されます。
IDEサポート
多数のIDEがDartのスクリプトをサポートしています。 例には、Jet Brainsの Eclipse、IntelliJ 、および WebStorm が含まれます。
以下は、 WebStrom IDE を使用してDart環境を設定する手順です。
WebStormのインストール
WebStormのインストールファイルは、https://www.jetbrains.com/webstorm/download/#section=windows-version [[[2]] 。]
WebStormインストールファイルは、Mac OS、Windows、およびLinuxで利用可能です。
インストールファイルをダウンロードした後、以下の手順に従ってください-
- Dart SDKをインストールします:上記の手順を参照してください
- 新しいDartプロジェクトを作成し、Dartサポートを構成する
- 新しいDartプロジェクトを作成するには、
- 「ようこそ」画面で「新規プロジェクトの作成」をクリックします
- 次のダイアログボックスで、[ダーツ]をクリックします
- Dart SDK パスに値が指定されていない場合は、SDKパスを指定します。 たとえば、SDKパスは <dart installation directory>/dart/dartsdk になります。
プロジェクトにDartファイルを追加する
プロジェクトにDartファイルを追加するには-
- プロジェクトを右クリック
- 新規→Dartファイル
- Dartスクリプトの名前を入力してください
WebStormエディタのスクリーンショットは以下のとおりです-
dart2jsツール
dart2jsツールはDart SDKの一部として出荷されており、/dartsdk/binフォルダーにあります。
DartをJavaScriptにコンパイルするには、ターミナルで次のコマンドを入力します
このコマンドは、Dartコードに相当するJavaScriptを含むファイルを生成します。 このユーティリティの使用に関する完全なチュートリアルは、Dartの公式Webサイトにあります。
Dartプログラミング-構文
構文は、プログラムを記述するための一連のルールを定義します。 すべての言語仕様は独自の構文を定義しています。 Dartプログラムはで構成されています-
- 変数と演算子
- クラス
- 関数
- 式とプログラミング構成
- 意思決定とループ構造
- コメント
- ライブラリとパッケージ
- 型定義
- コレクション/ジェネリックとして表されるデータ構造
初めてのダーツコード
従来の「Hello World」の例から始めましょう-
- main()関数は、Dartの事前定義されたメソッドです。 このメソッドは、アプリケーションへのエントリポイントとして機能します。 Dartスクリプトを実行するには、 main()*メソッドが必要です。 * print()*は、指定された文字列または値を標準出力に出力する定義済みの関数です。 ターミナル。
上記のコードの出力は次のようになります-
Dartプログラムを実行する
あなたは2つの方法でDartプログラムを実行することができます-
- ターミナル経由
- WebStorm IDE経由
ターミナル経由
端末を介してDartプログラムを実行するには-
- 現在のプロジェクトのパスに移動します
- [ターミナル]ウィンドウに次のコマンドを入力します
WebStorm IDE経由
WebStorm IDEを介してDartプログラムを実行するには-
- IDEでDartスクリプトファイルを右クリックします。 (ファイルには、実行を可能にする* main()*関数が含まれている必要があります)
- *「Run <file_name>」*オプションをクリックします。 同じのスクリーンショットを以下に示します-
あるいは、Run Buttonボタンをクリックするか、ショートカット Ctrl + Shift + F10 を使用してDartスクリプトを実行できます。
Dartコマンドラインオプション
Dartコマンドラインオプションは、Dartスクリプトの実行を変更するために使用されます。 Dartの一般的なコマンドラインオプションには次のものがあります-
Sr.No | Command-Line Option & Description |
---|---|
1 |
-c or --c アサーションとタイプチェックの両方を有効にします(チェックモード)。 |
2 |
--version VMバージョン情報を表示します。 |
3 |
--packages <path> パッケージ解決構成ファイルへのパスを指定します。 |
4 |
-p <path> インポートされたライブラリの場所を指定します。 このオプションは—packagesと共に使用できません。 |
5 |
-h or --help ヘルプを表示します。 |
チェックモードを有効にする
Dartプログラムは2つのモードで実行されます-
- チェックモード
- 実動モード(デフォルト)
開発およびテスト中に警告およびエラーを追加して開発およびデバッグプロセスを支援するため、開発およびテスト中はDart VMを*チェックモード*で実行することをお勧めします。 チェックモードでは、タイプチェックなどのさまざまなチェックが実行されます。 チェックモードをオンにするには、スクリプトの実行中に、スクリプトファイル名の前に-cまたは–-checkedオプションを追加します。
ただし、スクリプトの実行中にパフォーマンスの利点を確保するために、*実稼働モード*でスクリプトを実行することをお勧めします。
次の Test.dart スクリプトファイルを考慮してください-
次を入力してスクリプトを実行します-
タイプの不一致がありますが、チェックモードがオフになると、スクリプトは正常に実行されます。 スクリプトは、次の出力になります-
「--checked」または「-c」オプションでスクリプトを実行してみてください-
Or,
Dart VMは、タイプの不一致があることを示すエラーをスローします。
Dartの識別子
識別子は、変数、関数などのプログラム内の要素に付けられた名前です。 識別子のルールは-
識別子には、文字と数字の両方を含めることができます。 ただし、識別子を数字で始めることはできません。
- 識別子には、アンダースコア(_)またはドル記号($)以外の特殊記号を含めることはできません。
- 識別子をキーワードにすることはできません。
- それらは一意でなければなりません。
- 識別子では大文字と小文字が区別されます。
- 識別子にスペースを含めることはできません。
次の表に、有効な識別子と無効な識別子の例をいくつか示します-
Valid identifiers | Invalid identifiers |
---|---|
firstName | Var |
first_name | first name |
num1 | first-name |
$result | 1number |
Dartのキーワード
キーワードは、言語の文脈において特別な意味を持ちます。 次の表に、Dartのいくつかのキーワードを示します。
abstract 1 | continue | false | new | this |
as 1 | default | final | null | throw |
assert | deferred 1 | finally | operator 1 | true |
async 2 | do | for | part 1 | try |
async* 2 | dynamic 1 | get 1 | rethrow | typedef 1 |
await 2 | else | if | return | var |
break | enum | implements 1 | set 1 | void |
case | export 1 | import 1 | static 1 | while |
catch | external 1 | in | super | with |
class | extends | is | switch | yield 2 |
const | factory 1 | library 1 | sync* 2 | yield* 2 |
空白と改行
Dartは、プログラムに表示されるスペース、タブ、改行を無視します。 プログラムでは、スペース、タブ、改行を自由に使用できます。また、コードを読みやすく理解しやすくするために、プログラムをきちんと一貫した方法で自由にフォーマットおよびインデントできます。
Dartは大文字と小文字を区別します
Dartでは大文字と小文字が区別されます。 これは、Dartが大文字と小文字を区別することを意味します。
ステートメントはセミコロンで終わります
命令の各行はステートメントと呼ばれます。 各dartステートメントはセミコロン(;)で終わる必要があります。 1行に複数のステートメントを含めることができます。 ただし、これらのステートメントはセミコロンで区切る必要があります。
Dartのコメント
コメントは、プログラムの可読性を向上させる方法です。 コメントを使用して、コードの作成者などのプログラムに関する追加情報、関数/コンストラクトに関するヒントなどを含めることができます。 コメントはコンパイラによって無視されます。
Dartは次のタイプのコメントをサポートしています-
- 単一行コメント(//)-「//」と行末の間のテキストはコメントとして扱われます
- 複数行コメント(/ /)-これらのコメントは複数行にわたる場合があります。
例
Dartのオブジェクト指向プログラミング
Dartはオブジェクト指向言語です。 オブジェクト指向は、実世界のモデリングに従うソフトウェア開発パラダイムです。 オブジェクト指向は、プログラムを、メソッドと呼ばれるメカニズムを介して互いに通信するオブジェクトのコレクションと見なします。
- オブジェクト-オブジェクトは、エンティティのリアルタイム表現です。 Grady Broochによると、すべてのオブジェクトには3つの機能が必要です-
- 状態-オブジェクトの属性によって記述されます。
- 動作-オブジェクトの動作方法を説明します。
- Identity -オブジェクトを類似のそのようなオブジェクトのセットから区別する一意の値。
- クラス-OOPの観点でのクラスは、オブジェクトを作成するための青写真です。 クラスは、オブジェクトのデータをカプセル化します。
- メソッド-メソッドはオブジェクト間の通信を容易にします。
例:ダーツとオブジェクトの向き
上記の例では、クラス TestClass を定義しています。 クラスには* disp()メソッドがあります。 このメソッドは、文字列「Hello World」を端末に出力します。 新しいキーワードは、クラスのオブジェクトを作成します。 オブジェクトはメソッド disp()*を呼び出します。
コードは、次の*出力*を生成する必要があります-
Dartプログラミング-データ型
プログラミング言語の最も基本的な特性の1つは、サポートするデータ型のセットです。 これらは、プログラミング言語で表現および操作できる値のタイプです。
Dart言語は次のタイプをサポートしています-
- 番号
- 文字列
- ブール値
- リスト
- Maps
番号
Dartの数字は、数値リテラルを表すために使用されます。 ナンバーダートには2つのフレーバーがあります-
- 整数-整数値は非小数値、つまり小数点のない数値を表します。 たとえば、値「10」は整数です。 整数リテラルは、 int キーワードを使用して表されます。
- Double -Dartは小数値もサポートしています。 小数点付きの値。 DartのDoubleデータ型は、64ビット(倍精度)浮動小数点数を表します。 たとえば、値「10.10」。 キーワード double は、浮動小数点リテラルを表すために使用されます。
文字列
文字列は文字のシーケンスを表します。 たとえば、名前、住所などのデータを保存する場合 文字列データ型を使用する必要があります。 Dart文字列は、UTF-16コードユニットのシーケンスです。 *ルーン*は、UTF-32コードユニットのシーケンスを表すために使用されます。
キーワード String は、文字列リテラルを表すために使用されます。 文字列値は、一重引用符または二重引用符に埋め込まれます。
ブール値
ブールデータ型はブール値trueおよびfalseを表します。 Dartは bool キーワードを使用してブール値を表します。
リストと地図
データ型リストとマップは、オブジェクトのコレクションを表すために使用されます。 リスト*は、オブジェクトの順序付けられたグループです。 DartのListデータ型は、他のプログラミング言語の配列の概念と同義です。 *Map データ型は、一連の値をキーと値のペアとして表します。 dart:core ライブラリを使用すると、定義済みのListクラスとMapクラスを介してこれらのコレクションを作成および操作できます。
動的タイプ
Dartは、オプションで入力される言語です。 変数の型が明示的に指定されていない場合、変数の型は*動的*です。 dynamic キーワードは、明示的に型注釈として使用することもできます。
Dartプログラミング-変数
変数は、値を格納する「メモリ内の名前付きスペース」です。 つまり、プログラム内の値のコンテナとして機能します。 変数名は識別子と呼ばれます。 以下は、識別子の命名規則です-
- 識別子をキーワードにすることはできません。
- 識別子にはアルファベットと数字を含めることができます。
- アンダースコア(_)とドル($)記号を除いて、識別子にスペースと特殊文字を含めることはできません。
- 変数名は数字で始めることはできません。
型の構文
変数は、使用する前に宣言する必要があります。 Dartはvarキーワードを使用して同じことを実現します。 変数を宣言するための構文は以下のとおりです-
dartのすべての変数は、値を含むのではなく、値への参照を格納します。 nameという変数には、「Smith」という値を持つStringオブジェクトへの参照が含まれています。
Dartは、変数名の前にデータ型を付けることで type-checking をサポートしています。 型チェックにより、変数がデータ型に固有のデータのみを保持することが保証されます。 同じための構文は以下のとおりです-
次の例を考慮してください-
上記のスニペットでは、変数に割り当てられた値が変数のデータ型と一致しないため、警告が表示されます。
出力
すべての初期化されていない変数の初期値はnullです。 これは、Dartがすべての値をオブジェクトと見なすためです。 次の例は同じことを示しています-
出力
動的キーワード
静的型なしで宣言された変数は、暗黙的に動的として宣言されます。 変数は、varキーワードの代わりにdynamicキーワードを使用して宣言することもできます。
次の例は同じことを示しています。
出力
最終および定数
構文:最終キーワード
OR
構文:constキーワード
OR
例-最終キーワード
出力
例– constキーワード
上記の例では、 const キーワードを使用して、 pi および area の2つの定数を宣言しています。 area 変数の値はコンパイル時の定数です。
出力
注-コンパイル時定数の計算に使用できるのは const 変数のみです。 コンパイル時定数は、コンパイル時に値が決定される定数です。
例
上記のコードは、次のエラーを output としてスローします-
Dartプログラミング-演算子
式は、値に評価される特別な種類のステートメントです。 すべての式はで構成されています-
- オペランド-データを表します
- 演算子-値を生成するためにオペランドを処理する方法を定義します。
次の式を考慮してください-「2 + 3」。 この式では、2と3は*オペランド*であり、記号 "+"(プラス)は*演算子*です。
この章では、Dartで使用できる演算子について説明します。
- 算術演算子
- 平等および関係演算子
- 型テスト演算子
- ビット演算子
- 割り当て演算子 *論理演算子
算術演算子
次の表に、Dartでサポートされている算術演算子を示します。
リンク:/dart_programming/dart_programming_arithmetic_operators [例を表示]
Sr.No | Operators & Meaning |
---|---|
1 |
Add |
2 |
− 引く |
3 |
-expr 単項マイナス、否定とも呼ばれます(式の符号を逆にします) |
4 | かける |
5 |
/ 割る |
6 |
~/ 除算、整数の結果を返します |
7 |
% 整数除算の剰余を取得(モジュロ) |
8 |
* * インクリメント |
9 |
-- デクリメント |
平等および関係演算子
関係演算子は、2つのエンティティ間の関係の種類をテストまたは定義します。 関係演算子はブール値、つまり 正誤。
Aの値が10で、Bが20であると仮定します。
リンク:/dart_programming/dart_programming_equality_relational_operators [例を表示]
Operator | Description | Example |
---|---|---|
> | Greater than | (A > B) is False |
< | Lesser than | (A < B) is True |
>= | Greater than or equal to | (A >= B) is False |
⇐ | Lesser than or equal to | (A ⇐ B) is True |
== | Equality | (A==B) is False |
!= | Not equal | (A!=B) is True |
型テスト演算子
これらの演算子は、実行時に型をチェックするのに便利です。
リンク:/dart_programming/dart_programming_type_test_operators [例を表示]
Operator | Meaning |
---|---|
is | True if the object has the specified type |
is! | False if the object has the specified type |
ビット演算子
次の表は、Dartで使用可能なビット演算子とその役割を示しています-
リンク:/dart_programming/dart_programming_bitwise_operators [例を表示]
Operator | Description | Example |
---|---|---|
Bitwise AND | a & b | Returns a one in each bit position for which the corresponding bits of both operands are ones. |
Bitwise OR | a | b |
Returns a one in each bit position for which the corresponding bits of either or both operands are ones. | Bitwise XOR | a ^ b |
Returns a one in each bit position for which the corresponding bits of either but not both operands are ones. | Bitwise NOT | ~ a |
Inverts the bits of its operand. | Left shift | a LT b |
Shifts a in binary representation b (< 32) bits to the left, shifting in zeroes from the right. | Signpropagating right shift | a GT b |
割り当て演算子
次の表に、Dartで使用可能な割り当て演算子を示します。
リンク:/dart_programming/dart_programming_assignment_operators [例を表示]
Sr.No | Operator & Description |
---|---|
1 |
=(Simple Assignment ) 右側のオペランドから左側のオペランドに値を割り当てます
|
2 |
??= 変数がnullの場合にのみ値を割り当てます |
3 |
+=(Add and Assignment) 右オペランドを左オペランドに追加し、結果を左オペランドに割り当てます。 例:C + = AはC = C + Aと同等 |
4 |
─=(Subtract and Assignment) 左のオペランドから右のオペランドを減算し、結果を左のオペランドに割り当てます。 例:C-= AはC = C – Aと同等 |
5 |
*=(Multiply and Assignment) 右オペランドと左オペランドを乗算し、結果を左オペランドに割り当てます。 例:C = AはC = C Aと同等 |
6 |
/=(Divide and Assignment) 左のオペランドを右のオペランドで除算し、結果を左のオペランドに割り当てます。 |
注-ビットごとの演算子にも同じロジックが適用されるため、&Lt; =、&Gt; =、&Gt; =、&Gt; =、| =および^ =になります。
論理演算子
論理演算子は、2つ以上の条件を結合するために使用されます。 論理演算子はブール値を返します。 変数Aの値が10で、Bが20であると仮定します。
リンク:/dart_programming/dart_programming_logical_operators [例を表示]
Operator | Description | Example |
---|---|---|
&& | And − The operator returns true only if all the expressions specified return true | (A > 10 && B > 10) is False. |
OR − The operator returns true if at least one of the expressions specified return true | (A > 10 | |
B > 10) is True. | ! | NOT − The operator returns the inverse of the expression’s result. For E.g.: !(7>5) returns false |
条件式
Dartには、ifelseステートメントを必要とする式を評価できる2つの演算子があります-
調子 ? expr1:expr2
条件が真の場合、式は expr1 を評価します(そしてその値を返します)。それ以外の場合は、 expr2 の値を評価して返します。
expr1 ?? expr2
例
次の例は、Dartで条件式を使用する方法を示しています-
それは次の出力を生成します-
例
別の例を見てみましょう-
それは次の出力を生成します-
Dartプログラミング-ループ
時々、特定の命令は繰り返し実行する必要があります。 ループは同じことを行う理想的な方法です。 ループは、繰り返す必要がある一連の命令を表します。 ループのコンテキストでは、繰り返しは*反復*と呼ばれます。
次の図は、ループの分類を示しています-
確定ループで議論を始めましょう。 反復回数が確定/固定されているループは、*確定ループ*と呼ばれます。
Sr.No | Loop & Description |
---|---|
1 |
|
2 |
for … inループは、オブジェクトのプロパティをループするために使用されます。 |
次に、不定ループについて説明します。 不定ループは、ループ内の反復回数が不確定または不明な場合に使用されます。 を使用して無限ループを実装することができます-
Sr.No | Loop & Description |
---|---|
1 |
whileループは、指定された条件がtrueと評価されるたびに命令を実行します。 言い換えると、ループはコードブロックが実行される前に条件を評価します。 |
2 |
do … whileループは、do … whileループがループの最初の実行時に条件を評価しないことを除いて、whileループに似ています。 |
次に、Dartの Loop Control Statements について説明します。
Sr.No | Control Statement & Description |
---|---|
1 |
|
2 |
|
ラベルを使用してフローを制御する
ラベル*は、ステートメントまたはコードブロックに適用されるコロン(:)が後に続く単なる識別子です。 ラベルを *break および continue とともに使用して、フローをより正確に制御できます。
例:ブレーク付きのラベル
上記のコードが正常に実行されると、次の output が表示されます。
例:継続のラベル
上記のコードが正常に実行されると、次の出力が表示されます。
Dartプログラミング-意思決定
条件付き/意思決定構造は、命令が実行される前に条件を評価します。
Dartの条件付きコンストラクトは、次の表に分類されます。
Sr.No | Statement & Description |
---|---|
1 |
|
2 |
|
3 |
|
4 |
switchステートメントは式を評価し、式の値をcase句に一致させ、そのケースに関連付けられたステートメントを実行します。 |
Dartプログラミング-数字
ダーツ番号は次のように分類できます-
int -任意のサイズの整数。 int データ型は、整数を表すために使用されます。
double -IEEE 754標準で指定されている64ビット(倍精度)浮動小数点数。 double データ型は、小数を表すために使用されます
番号を宣言するための構文は以下のとおりです-
例
それは次の出力を生成します-
注-小数値が整数変数に割り当てられている場合、 Dart VM は例外をスローします。
構文解析
- parse()*静的関数を使用すると、数値リテラルを含む文字列を数値に解析できます。 次の図は同じことを示しています-
上記のコードは、次の出力になります-
解析関数は、数字以外の値が渡されると FormatException をスローします。 次のコードは、英数字の値を* parse()*関数に渡す方法を示しています。
例
上記のコードは、次の出力になります-
数値のプロパティ
次の表に、Dart番号でサポートされているプロパティを示します。
Sr.No | Property & Description |
---|---|
1 |
数値のハッシュコードを返します。 |
2 |
数が有限であれば真。それ以外の場合はfalse。 |
3 |
数値が正の無限大または負の無限大の場合は真。それ以外の場合はfalse。 |
4 |
isNan 数値が二重のNot-a-Number値である場合はtrue。それ以外の場合はfalse。 |
5 |
数値が負の場合は真。それ以外の場合はfalse。 |
6 |
数値の符号と数値に応じて、マイナス1、ゼロ、またはプラス1を返します。 |
7 |
数値が偶数の場合、trueを返します。 |
8 |
数値が奇数の場合、trueを返します。 |
数値メソッド
以下は、数字でサポートされている一般的に使用される方法のリストです-
シニア
方法と説明
1
リンク:/dart_programming/dart_programming_abs_method [abs]
数値の絶対値を返します。
2
リンク:/dart_programming/dart_programming_ceil_method [ceil]
数値以上の最小の整数を返します。
3
リンク:/dart_programming/dart_programming_compareto_method [compareTo]
これを他の数値と比較します。
4
リンク:/dart_programming/dart_programming_floor_method [Floor]
現在の数値以下の最大の整数を返します。
5
リンク:/dart_programming/dart_programming_remainder_method [remainder]
2つの数値を除算した後、切り捨てられた剰余を返します。
6
リンク:/dart_programming/dart_programming_round_method [Round]
現在の数値に最も近い整数を返します。
7
リンク:/dart_programming/dart_programming_todouble_method [toDouble]
数値の2倍に相当する値を返します。
8
リンク:/dart_programming/dart_programming_toint_method [toInt]
数値に相当する整数を返します。
9
リンク:/dart_programming/dart_programming_number_tostring_method [toString]
文字列に相当する数値の表現を返します。
10
リンク:/dart_programming/dart_programming_truncate_method [truncate]
小数桁を破棄した後に整数を返します。
Dartプログラミング-文字列
Stringデータ型は、一連の文字を表します。 Dart文字列は、UTF 16コードユニットのシーケンスです。
Dartの文字列値は、単一引用符、二重引用符、または三重引用符を使用して表すことができます。 単一行ストリングは、単一引用符または二重引用符を使用して表されます。 三重引用符は、複数行の文字列を表すために使用されます。
Dartで文字列値を表す構文は以下のとおりです-
構文
次の例は、DartでのStringデータ型の使用を示しています。
次の Output が生成されます-
文字列は不変です。 ただし、文字列にはさまざまな操作を行うことができ、結果の文字列は新しい値として保存できます。
文字列補間
静的文字列に値を追加して新しい文字列を作成するプロセスは、*連結*または*補間*と呼ばれます。 つまり、文字列を別の文字列に追加するプロセスです。
演算子プラス(+)は、文字列を連結/補間するために一般的に使用されるメカニズムです。
例1
次の output が生成されます-
例2
「$ \ {}」を使用して、文字列内のDart式の値を補間できます。 次の例は同じことを示しています。
次の output が生成されます-
文字列のプロパティ
次の表にリストされているプロパティはすべて読み取り専用です。
Sr.No | Property & Description |
---|---|
1 |
この文字列のUTF-16コード単位の変更不可能なリストを返します。 |
2 |
この文字列が空の場合、trueを返します。 |
3 |
スペース、タブ、改行文字を含む文字列の長さを返します。 |
文字列を操作するメソッド
- dart:コアライブラリ*のStringクラスは、文字列を操作するメソッドも提供します。 これらの方法のいくつかを以下に示します-
Sr.No | Methods & Description |
---|---|
1 |
この文字列のすべての文字を小文字に変換します。 |
2 |
この文字列のすべての文字を大文字に変換します。 |
3 |
先頭および末尾の空白なしで文字列を返します。 |
4 |
このオブジェクトを別のオブジェクトと比較します。 |
5 |
指定されたパターンに一致するすべての部分文字列を指定された値に置き換えます。 |
6 |
指定された区切り文字の一致で文字列を分割し、部分文字列のリストを返します。 |
7 |
startIndex(両端を含む)からendIndex(排他的)に及ぶこの文字列の部分文字列を返します。 |
8 |
このオブジェクトの文字列表現を返します。 |
9 |
指定されたインデックスで16ビットUTF-16コード単位を返します。 |
Dartプログラミング-ブール
Dartは、ブールデータ型の組み込みサポートを提供します。 DARTのブールデータ型は、trueとfalseの2つの値のみをサポートします。 キーワードboolは、DARTでブールリテラルを表すために使用されます。
DARTでブール変数を宣言するための構文は以下のとおりです-
例
次の output が生成されます-
例
JavaScriptとは異なり、ブールデータ型はリテラルtrueのみをtrueとして認識します。 その他の値はすべて偽と見なされます。 次の例を考慮してください-
上記のスニペットをJavaScriptで実行すると、文字列が空でない場合にif構造体がtrueを返すため、「文字列が空ではありません」というメッセージが出力されます。
ただし、Dartでは、 str はstr!= true_として_falseに変換されます。 そのため、スニペットは_ ‘空の文字列’ _というメッセージを出力します(チェックなしモードで実行した場合)。
例
上記のスニペットを checked モードで実行すると、例外がスローされます。 同じことを以下に示します-
注- WebStorm IDEはデフォルトでチェックモードで実行されます。
Dartプログラミング-リスト
プログラミングで非常に一般的に使用されるコレクションは、配列*です。 Dartは、 *List オブジェクトの形式で配列を表します。 リスト*は、単にオブジェクトの順序付けられたグループです。 *dart:core ライブラリは、リストの作成と操作を可能にするListクラスを提供します。
Dartのリストの論理表現は以下のとおりです-
- test_list -コレクションを参照する識別子です。
- リストには、値12、13、および14が含まれます。 これらの値を保持するメモリブロックは、*要素*と呼ばれます。
- リストの各要素は、インデックス*と呼ばれる一意の番号で識別されます。 インデックスは *zero から始まり、 n-1 まで拡張されます。 n はリスト内の要素の総数です。 インデックスは*添え字*とも呼ばれます。
リストは次のように分類できます-
- 固定長リスト
- 成長可能なリスト
ここで、これら2つのタイプの*リスト*について詳しく説明します。
固定長リスト
固定長リストの長さは実行時に変更できません。 固定長リストを作成するための構文は以下のとおりです-
ステップ1-リストの宣言
固定長リストを宣言するための構文は以下のとおりです-
上記の構文は、指定されたサイズのリストを作成します。 リストは実行時に拡大または縮小できません。 リストのサイズを変更しようとすると、例外が発生します。
ステップ2-リストの初期化
リストを初期化するための構文は以下のとおりです-
例
次の output が生成されます-
成長可能なリスト
成長可能なリストの長さは、実行時に変更できます。 拡張可能リストを宣言および初期化するための構文は以下のとおりです-
ステップ1-リストの宣言
ステップ2-リストの初期化
インデックス/サブスクリプトは、値が入力される要素を参照するために使用されます。 リストを初期化するための構文は以下のとおりです-
例
次の例は、3つの要素のリストを作成する方法を示しています。
次の output が生成されます-
例
次の例では、* empty List()コンストラクター*を使用して長さゼロのリストを作成します。 List クラスの* add()*関数は、リストに要素を動的に追加するために使用されます。
次の output が生成されます-
リストのプロパティ
次の表に、* dart:coreライブラリ*の List クラスで一般的に使用されるいくつかのプロパティを示します。
Sr.No | Methods & Description |
---|---|
1 |
最初の要素のケースを返します。 |
2 |
コレクションに要素がない場合はtrueを返します。 |
3 |
コレクションに少なくとも1つの要素がある場合、trueを返します。 |
4 |
リストのサイズを返します。 |
5 |
リストの最後の要素を返します。 |
6 |
リストの値を逆順に含む反復可能なオブジェクトを返します。 |
7 |
リストに要素が1つだけあるかどうかを確認して返します。 |
Dartプログラミング-リスト(基本操作)
この章では、次のようなリストの基本的な操作を実行する方法について説明します-
Sr.No | Basic Operation & Description |
---|---|
1 |
Inserting Elements into a List 可変リストは、実行時に動的に拡大できます。 * List.add()*関数は、指定された値をリストの最後に追加し、変更されたリストオブジェクトを返します。 |
2 |
Dartのリストは、次の方法で更新できます-
|
3 |
dart:coreライブラリのListクラスでサポートされている次の関数を使用して、リスト内のアイテムを削除できます。 |
Dartプログラミング-マップ
Mapオブジェクトは、単純なキー/値のペアです。 マップ内のキーと値はどのタイプでもかまいません。 マップは動的なコレクションです。 つまり、マップは実行時に拡大および縮小することができます。
マップは2つの方法で宣言することができます-
- マップリテラルの使用
- Mapコンストラクターを使用する
マップリテラルを使用したマップの宣言
マップリテラルを使用してマップを宣言するには、キーと値のペアを中括弧 "\ {}" のペアで囲む必要があります。
ここにその*構文*があります-
マップコンストラクターを使用してマップを宣言する
Mapコンストラクターを使用してMapを宣言するには、2つのステップがあります。 まず、マップを宣言し、次にマップを初期化します。
- マップを宣言する*構文*は次のとおりです-
さて、次の構文を使用して*マップを初期化*-
例:マップリテラル
次の output が生成されます-
例:実行時にマップリテラルに値を追加する
次の output が生成されます-
例:マップコンストラクター
次の output が生成されます-
注-マップ値には、NULLを含む任意のオブジェクトを指定できます。
マップ-プロパティ
dart:coreパッケージの Map クラスは、次のプロパティを定義します-
Sr.No | Property & Description |
---|---|
1 |
キーを表す反復可能なオブジェクトを返します |
2 |
値を表す反復可能なオブジェクトを返します |
3 |
マップのサイズを返します |
4 |
マップが空のマップの場合、trueを返します |
5 |
マップが空のマップの場合、trueを返します |
マップ-機能
以下は、Dartでマップを操作するために一般的に使用される関数です。
Sr.No | Function Name & Description |
---|---|
1 |
otherのすべてのキーと値のペアをこのマップに追加します。 |
2 |
マップからすべてのペアを削除します。 |
3 |
キーおよびキーに関連付けられた値(存在する場合)をマップから削除します。 |
4 |
マップの各キーと値のペアにfを適用します。 |
Dartプログラミング-シンボル
Dartのシンボルは、ライブラリのメタデータを反映するために使用される不透明で動的な文字列名です。 簡単に言えば、シンボルは、人間が読める文字列とコンピューターで使用するために最適化された文字列との関係を保存する方法です。
リフレクションは、クラス内のメソッドの数、クラスに含まれるコンストラクターの数、関数内のパラメーターの数など、実行時に型のメタデータを取得するメカニズムです。 実行時にロードされるタイプのメソッドを呼び出すこともできます。
Dartリフレクションでは、特定のクラスが dart:mirrors パッケージで利用可能です。 このライブラリは、Webアプリケーションとコマンドラインアプリケーションの両方で機能します。
構文
例
次の例を考えてください。 このコードは、ライブラリ foo_lib でクラス Foo を宣言します。 このクラスは、 m1、m2 、および m3 メソッドを定義します。
Foo.dart
次のコードは、 Foo.dart ライブラリをロードし、Symbolタイプを使用してFooクラスを検索します。 上記のライブラリのメタデータを反映しているため、コードは dart:mirrors ライブラリをインポートします。
FooSymbol.dart
libMirror.declarations.forEach((s、d)⇒ print(s));という行に注意してください。実行時にライブラリ内のすべての宣言を反復処理し、宣言を Symbol のタイプとして出力します。
このコードは、次の*出力*を生成する必要があります-
例:クラスのインスタンスメソッドの数を表示する
クラス内のインスタンスメソッドの数を表示することを考えてみましょう。 定義済みのクラス ClassMirror は、同じことを達成するのに役立ちます。
このコードは、次の*出力*を生成する必要があります-
シンボルを文字列に変換
次の output が生成されるはずです-
Dartプログラミング-ルーン文字
文字列は文字のシーケンスです。 Dartは、文字列をUnicode UTF-16コードユニットのシーケンスとして表します。 Unicodeは、文字、数字、記号ごとに一意の数値を定義する形式です。
Dart文字列はUTF-16コードユニットのシーケンスであるため、文字列内の32ビットUnicode値は特別な構文を使用して表されます。 rune は、Unicodeコードポイントを表す整数です。
- String.codeUnitAt()関数を使用する
- String.codeUnitsプロパティを使用する
- String.runesプロパティを使用する
String.codeUnitAt()関数
文字列内のコード単位には、インデックスを介してアクセスできます。 指定されたインデックスで16ビットUTF-16コード単位を返します。
構文
例
次の output が生成されます-
String.codeUnitsプロパティ
このプロパティは、指定された文字列のUTF-16コード単位の変更不可能なリストを返します。
構文
例
次の output が生成されます-
String.runesプロパティ
このプロパティは、この string.Runes のUnicodeコードポイントの反復可能オブジェクトを返します。
構文
例
次の output が生成されます-
通常、Unicodeコードポイントは \ uXXXX として表されます。XXXXは4桁の16進値です。 4桁以上または16進数未満を指定するには、値を中括弧で囲みます。 同じためにdart:coreライブラリのRunesクラスのコンストラクタを使用できます。
例
次の output が生成されます-
Dartプログラミング-列挙
名前付き定数値の定義には列挙が使用されます。 列挙型は、 enum キーワードを使用して宣言されます。
構文
どこで、
- _enum_name_は、列挙型の名前を指定します
- _enumeration list_は、コンマ区切りの識別子のリストです
列挙リスト内の各シンボルは整数値を表し、その前のシンボルよりも1つ大きくなります。 デフォルトでは、最初の列挙シンボルの値は0です。
例えば
例
次の output が生成されます-
Dartプログラミング-関数
関数は、読み取り可能、保守可能、および再利用可能なコードの構成要素です。 関数は、特定のタスクを実行するための一連のステートメントです。 関数は、プログラムをコードの論理ブロックに編成します。 定義すると、コードにアクセスするために関数を呼び出すことができます。 これにより、コードが再利用可能になります。 さらに、関数を使用すると、プログラムのコードの読み取りと保守が簡単になります。
関数宣言は、関数の名前、戻り値の型、およびパラメーターについてコンパイラーに通知します。 関数定義は、関数の実際の本体を提供します。
Sr.No | Functions & Description |
---|---|
1 |
関数定義は、特定のタスクの実行内容と方法を指定します。 |
2 |
関数を実行するには、関数を呼び出す必要があります。 |
3 |
関数は、制御とともに値を呼び出し元に戻すこともできます。 |
4 |
パラメータは、値を関数に渡すメカニズムです。 |
オプションのパラメータ
オプションのパラメーターは、関数の実行のために引数を強制的に渡す必要がない場合に使用できます。 パラメータには、名前に疑問符を追加することにより、オプションとしてマークできます。 オプションのパラメーターは、関数の最後の引数として設定する必要があります。
Dartには3種類のオプションパラメータがあります-
Sr.No | Parameter & Description |
---|---|
1 |
オプションの定位置パラメーターを指定するには、角括弧[]を使用します。 |
2 |
定位置パラメーターとは異なり、パラメーターの名前は、値を渡すときに指定する必要があります。 中括弧\ {}を使用して、オプションの名前付きパラメーターを指定できます。 |
3 |
Optional Parameters with Default Values 関数パラメーターには、デフォルトで値を割り当てることもできます。 ただし、このようなパラメーターは明示的に値を渡すこともできます。 |
再帰ダーツ関数
再帰は、結果に到達するまで関数呼び出しを繰り返し実行することにより、操作を反復する手法です。 再帰は、ループ内から異なるパラメーターを使用して同じ関数を繰り返し呼び出す必要がある場合に最適です。
例
次の output が生成されるはずです-
ラムダ関数
Lambda関数は、関数を表す簡潔なメカニズムです。 これらの関数は、矢印関数とも呼ばれます。
構文
例
次の output が生成されるはずです-
Dartプログラミング-インターフェイス
- クラス*は、インターフェイスを使用できるようにimplementsキーワードを使用する必要があります。 実装クラスには、実装されたインターフェースのすべての機能の具体的な実装を提供することが必須です。 言い換えれば、クラスは実装したいインターフェースのすべての関数を再定義しなければなりません。
構文:インターフェースの実装
例
次のプログラムでは、クラス Printer を宣言しています。 ConsolePrinter クラスは、 Printer クラスの暗黙的なインターフェイス宣言を実装します。 main 関数は、 new キーワードを使用して ConsolePrinter クラスのオブジェクトを作成します。 このオブジェクトは、 ConsolePrinter クラスで定義された関数 print_data を呼び出すために使用されます。
次の output が生成されるはずです-
複数のインターフェースの実装
クラスは複数のインタフェースを実装できます。 インターフェイスはコンマで区切られます。 同じための*構文*は以下に示されています-
次の*例*は、Dartで複数のインターフェイスを実装する方法を示しています-
次の output が生成されるはずです-
Dartプログラミング-クラス
Dartはオブジェクト指向言語です。 クラス、インターフェースなどのオブジェクト指向プログラミング機能をサポートしています。 OOPに関する class は、オブジェクトを作成するための青写真です。 class はオブジェクトのデータをカプセル化します。 Dartは、 class と呼ばれるこの概念の組み込みサポートを提供します。
クラスを宣言する
構文
クラス定義には、次のものを含めることができます-
- フィールド-フィールドは、クラスで宣言された変数です。 フィールドは、オブジェクトに関連するデータを表します。
- セッターとゲッター-プログラムがクラスのフィールドの値を初期化および取得できるようにします。 デフォルトのゲッター/セッターはすべてのクラスに関連付けられています。 ただし、セッター/ゲッターを明示的に定義することにより、デフォルトのものをオーバーライドできます。
- コンストラクタ-クラスのオブジェクトにメモリを割り当てる役割を担います。
- 関数-関数はオブジェクトが実行できるアクションを表します。 また、メソッドと呼ばれることもあります。
これらのコンポーネントをまとめて、クラスの*データメンバー*と呼びます。
例:クラスの宣言
この例では、クラス Car を宣言しています。 クラスには engine という名前のフィールドがあります。 * disp()は、フィールド *engine の値を出力する単純な関数です。
クラスのインスタンスの作成
クラスのインスタンスを作成するには、 new キーワードにクラス名を続けて使用します。 同じための構文は以下のとおりです-
構文
- new キーワードはインスタンス化を担当します。
- 式の右側は、コンストラクターを呼び出します。 パラメーター化されている場合、コンストラクターに値を渡す必要があります。
例:クラスのインスタンス化
属性と機能へのアクセス
クラスの属性と機能は、オブジェクトを介してアクセスできます。 クラスのデータメンバーにアクセスするには、「。」ドット表記(*ピリオドと呼ばれる)を使用します。
例
Dartの属性と機能にアクセスする方法を理解するために、次の例を見てください-
上記のコードの*出力*は次のとおりです-
Dartコンストラクター
コンストラクターは、クラスの変数の初期化を担当するクラスの特別な関数です。 Dartは、クラスの名前と同じ名前のコンストラクターを定義します。 コンストラクターは関数であるため、パラメーター化できます。 ただし、関数とは異なり、コンストラクターは戻り値の型を持つことはできません。 コンストラクターを宣言しない場合、デフォルトの*引数なしコンストラクター*が提供されます。
構文
例
次の例は、Dartでコンストラクタを使用する方法を示しています-
次の output が生成されるはずです-
名前付きコンストラクター
Dartは named constructors を提供して、クラスが*複数のコンストラクター*を定義できるようにします。 名前付きコンストラクタの構文は以下のとおりです-
構文:コンストラクターの定義
例
次の例は、Dartで名前付きコンストラクタを使用する方法を示しています-
次の output が生成されるはずです-
thisキーワード
例
次の例では、Dartで this キーワードを使用する方法を説明します-
次の output が生成されるはずです-
Dart Class─ゲッターとセッター
デフォルトのゲッター/セッターは、すべてのクラスに関連付けられています。 ただし、セッター/ゲッターを明示的に定義することにより、デフォルトのものをオーバーライドできます。 ゲッターにはパラメーターがなく、値を返します。セッターにはパラメーターが1つあり、値を返しません。
構文:ゲッターの定義
構文:セッターの定義
例
次の例は、Dartクラスで getters および setters を使用する方法を示しています-
このプログラムコードは、次の*出力*を生成する必要があります-
クラスの継承
Dartは、既存のクラスから新しいクラスを作成するプログラムの機能である継承の概念をサポートしています。 新しいクラスを作成するために拡張されたクラスは、親クラス/スーパークラスと呼ばれます。 新しく作成されたクラスは、子/サブクラスと呼ばれます。
クラスは、「extends」キーワードを使用して別のクラスから継承します。 子クラスは、親クラスのコンストラクタを除くすべてのプロパティとメソッドを継承します。
構文
注-Dartは多重継承をサポートしていません。
例:クラスの継承
次の例では、クラス Shape を宣言しています。 このクラスは、 Circle クラスによって拡張されます。 クラス間に継承関係があるため、子クラス、つまりクラス Car は親クラスのデータメンバーへの暗黙的なアクセスを取得します。
次の output が生成されるはずです-
継承の種類
継承は、次の3つのタイプにすることができます-
- Single -すべてのクラスは、1つの親クラスから最大で拡張できます。
- Multiple -クラスは複数のクラスから継承できます。 Dartは多重継承をサポートしていません。
- マルチレベル-クラスは別の子クラスから継承できます。
例
次の例は、マルチレベルの継承の仕組みを示しています-
クラス Leaf は、マルチレベルの継承により、RootクラスとChildクラスから属性を取得します。 その*出力*は次のとおりです-
Dart –クラスの継承とメソッドのオーバーライド
メソッドのオーバーライドは、子クラスが親クラスのメソッドを再定義するメカニズムです。 次の例は同じことを示しています-
例
次の output が生成されるはずです-
メソッドをオーバーライドしている間、関数パラメーターの数とタイプは一致する必要があります。 パラメーターの数またはそれらのデータ型が一致しない場合、Dartコンパイラーはエラーをスローします。 次の図は同じことを説明しています-
次の output が生成されるはずです-
静的キーワード
例
次の output が生成されるはずです-
スーパーキーワード
例
次の output が生成されるはずです-
Dartプログラミング-オブジェクト
オブジェクト指向プログラミングは、オブジェクトを「定義された境界を持つエンティティ」として定義します。オブジェクトには次のものがあります-
- 状態-オブジェクトを説明します。 クラスのフィールドはオブジェクトの状態を表します。
- 動作-オブジェクトができることを説明します。
- ID -オブジェクトを類似した他のオブジェクトのセットから区別する一意の値。 2つ以上のオブジェクトが状態と動作を共有できますが、IDは共有できません。
期間演算子*(。)*は、オブジェクトと組み合わせて使用され、クラスのデータメンバーにアクセスします。
例
Dartは、オブジェクトの形式でデータを表します。 Dartのすべてのクラスは、Objectクラスを拡張します。 以下は、オブジェクトを作成して使用する簡単な例です。
次の output が生成されるはずです-
カスケード演算子(..)
上記の例は、クラス内のメソッドを呼び出します。 ただし、関数が呼び出されるたびに、オブジェクトへの参照が必要です。 cascade operator は、一連の呼び出しがある場合の省略形として使用できます。
カスケード(.. )演算子を使用して、オブジェクトを介して一連の呼び出しを発行できます。 上記の例は、次のように書き直すことができます。
次の output が生成されるはずです-
toString()メソッド
この関数は、オブジェクトの文字列表現を返します。 次の例を見て、 toString メソッドの使用方法を理解してください。
次の output が生成されるはずです-
Dartプログラミング-コレクション
Dartは他のプログラミング言語とは異なり、配列をサポートしていません。 Dartコレクションを使用して、配列などのデータ構造を複製できます。 dart:coreライブラリと他のクラスは、Dartスクリプトでのコレクションサポートを有効にします。
Dartコレクションは基本的に次のように分類できます-
Sr.No | Dart collection & Description |
---|---|
1 |
リストは、単にオブジェクトの順序付けられたグループです。 dart:core ライブラリは、リストの作成と操作を可能にするListクラスを提供します。
|
2 |
Setは、各オブジェクトが1回しか出現できないオブジェクトのコレクションを表します。 dart:coreライブラリは、同じものを実装するSetクラスを提供します。 |
3 |
Mapオブジェクトは、単純なキー/値のペアです。 マップ内のキーと値はどのタイプでもかまいません。 マップは動的なコレクションです。 つまり、マップは実行時に拡大および縮小することができます。 dart:coreライブラリのMapクラスは、同じサポートを提供します。 |
4 |
キューは、両端で操作できるコレクションです。 キューは、先入れ先出しのコレクションを構築する場合に役立ちます。 簡単に言えば、キューは一方の端からデータを挿入し、もう一方の端から削除します。 値は、挿入された順に削除または読み取られます。 |
コレクションの反復
例
次の例は、反復子オブジェクトを使用してコレクションを走査する方法を示しています。
- moveNext()関数は、後続のエントリがあるかどうかを示すブール値を返します。 反復子オブジェクトの *current プロパティは、反復子が現在指しているオブジェクトの値を返します。
このプログラムは、次の*出力*を生成する必要があります-
Dartプログラミング-ジェネリック
Dartは*オプションで型指定された言語*です。 Dartのコレクションは、デフォルトでは異種です。 つまり、1つのDartコレクションでさまざまなタイプの値をホストできます。 ただし、同種の値を保持するためにDartコレクションを作成できます。 ジェネリックの概念は、同じことを達成するために使用できます。
Genericsを使用すると、コレクションに含めることができる値のデータ型に制限が適用されます。 このようなコレクションは、タイプセーフコレクションと呼ばれます。 タイプセーフは、メモリブロックに特定のデータタイプのデータのみを含めることができるようにするプログラミング機能です。
すべてのDartコレクションは、ジェネリックを介したタイプセーフ実装をサポートしています。 データ型を含む山括弧のペアを使用して、タイプセーフなコレクションを宣言します。 タイプセーフなコレクションを宣言するための構文は次のとおりです。
構文
List、Map、Set、およびQueueのタイプセーフな実装を以下に示します。 この機能は、上記のコレクションタイプのすべての実装でもサポートされています。
例:汎用リスト
次の output が生成されるはずです-
指定されたタイプ以外の値を挿入しようとすると、コンパイルエラーが発生します。 次の例はこれを示しています。
例
次の output が生成されるはずです-
例:汎用セット
次の output が生成されるはずです-
例:汎用キュー
次の output が生成されるはずです-
汎用マップ
タイプセーフマップ宣言は、データ型を指定します-
- キー
- 値
構文
例
次の output が生成されるはずです-
Dartプログラミング-パッケージ
パッケージは、プログラミングユニットのグループをカプセル化するメカニズムです。 アプリケーションでは、サードパーティのライブラリまたはプラグインの統合が必要になる場合があります。 すべての言語には、JavaのMavenまたはGradle、.NETのNuget、Node.jsのnpmなどの外部パッケージを管理するメカニズムがあります。 Dartのパッケージマネージャーは pub です。
Pubは、リポジトリにパッケージをインストールするのに役立ちます。 ホストされるパッケージのリポジトリは、https://pub.dartlang.org/[[[3]]]にあります。
パッケージメタデータ*は、 *pubsec.yaml ファイルで定義されています。 YAMLは Yet Another Markup Language の頭字語です。 pub ツールを使用して、アプリケーションに必要なさまざまなライブラリをすべてダウンロードできます。
すべてのDartアプリケーションには、他のライブラリへのアプリケーションの依存関係と、アプリケーション名、作成者、バージョン、説明などのアプリケーションのメタデータを含む pubspec.yaml ファイルがあります。
重要な* pubコマンド*は次のとおりです-
Sr.No | Command & Description |
---|---|
1 |
‘pub get’ アプリケーションが依存しているすべてのパッケージを取得するのに役立ちます。 |
2 |
‘pub upgrade’ すべての依存関係を新しいバージョンにアップグレードします。 |
3 |
‘pub build’ これはWebアプリケーションのビルドに使用され、ビルドフォルダーを作成し、それに関連するすべてのスクリプトを含めます。 |
4 |
‘pub help’ これにより、すべての異なるpubコマンドのヘルプが提供されます。 |
WebStormのようなIDEを使用している場合、pubspec.yamlを右クリックして、すべてのコマンドを直接取得できます-
パッケージのインストール
アプリケーションがxmlを解析する必要がある例を考えてみましょう。 Dart XMLは、オープンソースであり、XMLドキュメントの解析、トラバース、クエリ、および構築に適した軽量のライブラリです。
上記のタスクを達成するための手順は次のとおりです-
- ステップ1 *-以下をpubsec.yamlファイルに追加します。
ダウンロードしたパッケージとその依存パッケージは、packagesフォルダーで確認できます。
これでインストールが完了したため、プロジェクトで dart xml を参照する必要があります。 構文は次のとおりです-
XML文字列を読み取る
XML文字列を読み取り、入力を確認するために、Dart XMLは* parse()*メソッドを使用します。 構文は次のとおりです-
例:XML文字列入力の解析
次の例は、XML文字列入力を解析する方法を示しています-
次の output が生成されるはずです-
Dartプログラミング-例外
例外(または例外的なイベント)は、プログラムの実行中に発生する問題です。 例外が発生すると、プログラムの通常のフローが中断され、プログラム/アプリケーションが異常終了します。
組み込みのDartの例外には次のものがあります-
Sr.No | Exceptions & Description |
---|---|
1 |
DeferredLoadException 遅延ライブラリがロードに失敗するとスローされます。 |
2 |
FormatException 文字列またはその他のデータに予期される形式がなく、解析または処理できない場合にスローされる例外。 |
3 |
IntegerDivisionByZeroException 数値がゼロで除算されるとスローされます。 |
4 |
IOException Inupt-Outputに関連するすべての例外の基本クラス。 |
5 |
IsolateSpawnException 分離を作成できない場合にスローされます。 |
6 |
Timeout 非同期結果を待っている間にスケジュールされたタイムアウトが発生したときにスローされます。 |
Dartのすべての例外は、事前定義されたクラス Exception のサブタイプです。 アプリケーションが突然終了しないように、例外を処理する必要があります。
try/on/catchブロック
例外を処理するための*構文*は以下のとおりです-
以下は覚えておくべきポイントです-
- コードスニペットは、複数の例外を処理するために複数のon/catchブロックを持つことができます。
- onブロックとcatchブロックは相互に包括的です。 tryブロックは、onブロックとcatchブロックの両方に関連付けることができます。
次のコードは、Dartでの例外処理を示しています-
例:ONブロックの使用
次のプログラムは、変数 x および y でそれぞれ表される2つの数値を除算します。 ゼロによる除算を試みるため、コードは例外をスローします。 on block には、この例外を処理するコードが含まれています。
次の output が生成されるはずです-
例:catchブロックの使用
次の例では、上記と同じコードを使用しています。 唯一の違いは、(ONブロックではなく)* catchブロック*に例外を処理するコードが含まれていることです。 catch のパラメーターには、実行時にスローされる例外オブジェクトが含まれます。
次の output が生成されるはずです-
例:on…catch
次の例は、 on … catch ブロックの使用方法を示しています。
次の output が生成されるはずです-
最後のブロック
次の例は、 finally ブロックの使用法を示しています。
次の output が生成されるはずです-
例外を投げる
明示的に例外を発生させるための*構文*は-
例
次の例は、 throw キーワードを使用して例外をスローする方法を示しています-
次の output が生成されるはずです-
カスタム例外
上記で指定したように、Dartのすべての例外タイプは、組み込みクラス Exception のサブタイプです。 Dartでは、既存の例外を拡張することにより、カスタム例外を作成できます。 カスタム例外を定義するための構文は以下のとおりです-
構文:例外の定義
カスタム例外は明示的に発生させる必要があり、同じ例外をコードで処理する必要があります。
例
次の例は、カスタム例外を定義および処理する方法を示しています。
上記のコードでは、カスタム例外 AmtException を定義しています。 渡された金額が例外範囲内にない場合、コードは例外を発生させます。 main 関数は、 try … catch ブロックで関数呼び出しを囲みます。
コードは、次の*出力*を生成する必要があります-
Dartプログラミング-デバッグ
時々、開発者はコーディング中に間違いを犯します。 プログラムの間違いはバグと呼ばれます。 バグを見つけて修正するプロセスはデバッグと呼ばれ、開発プロセスの通常の部分です。 このセクションでは、タスクのデバッグに役立つツールとテクニックについて説明します。
WebStormエディターは、ブレークポイントとステップバイステップのデバッグを可能にします。 プログラムは、ブレークポイントがアタッチされたポイントでブレークします。 この機能は、JavaまたはC#アプリケーションの開発に期待される機能に似ています。 WebStormエディターから、変数の監視、スタックの閲覧、ステップオーバー、メソッドおよび関数呼び出しへのステップインができます。
ブレークポイントを追加する
次のコードスニペットを考えてください。 *(TestString.dart) *
- ブレークポイントを追加*するには、左マージンをクリックします。 以下の図では、行番号7にブレークポイントがあります。
プログラムをデバッグモードで実行します。 プロジェクトエクスプローラーで、このケースのTestString.dartのdartプログラムを右クリックします。
プログラムがデバッグモードで実行されると、次のスクリーンショットに示すようなデバッガウィンドウが表示されます。 変数タブには、現在のコンテキストの変数の値が表示されます。 特定の変数にウォッチャーを追加し、ウォッチウィンドウを使用してその値の変化を聞くことができます。
デバッグメニューの[ステップイン](F7)矢印アイコンは、一度に1ステートメントずつコードを実行するのに役立ちます。 メインメソッドがサブルーチンを呼び出す場合、これはサブルーチンコードにも入ります。
ステップオーバー(F8):*ステップイン*に似ています。 使用法の違いは、現在のステートメントにサブルーチンの呼び出しが含まれている場合に発生します。 メインメソッドがサブルーチンを呼び出す場合、ステップオーバーはサブルーチンにドリルしません。 サブルーチンをスキップします。
ステップアウト(Shift + F8):現在の実行ポイントがある関数の残りの行を実行します。 表示される次のステートメントは、サブルーチン呼び出しに続くステートメントです。
デバッグモードで実行した後、プログラムは次の*出力*を提供します-
Dartプログラミング-Typedef
以下は、Dartプログラムで typedefs を実装する手順です。
ステップ1:typedefの定義
ステップ2:関数をtypedef変数に割り当てる
ステップ3:関数の呼び出し
例
次に、Dartの typedef の詳細を理解するための例を見てみましょう。
最初に、 typedef を定義します。 ここでは、関数シグネチャを定義しています。 この関数は、 integer 型の2つの入力パラメーターを取ります。 戻り値の型は関数シグネチャの一部ではありません。
次に、関数を定義しましょう。 ManyOperation typedef と同じ関数シグネチャを持ついくつかの関数を定義します。
最後に、 typedef を介して関数を呼び出します。 ManyOperations型の変数を宣言します。 関数名を宣言された変数に割り当てます。
すべての部品をまとめて、完全なプログラムを見てみましょう。
プログラムは、次の*出力*を生成する必要があります-
注- typedef 変数が異なる関数シグネチャを持つ関数をポイントしようとすると、上記のコードはエラーになります。
例
次の output が生成されます-
Dartプログラミング-ライブラリ
プログラミング言語のライブラリは、ルーチン(プログラミング命令のセット)のコレクションを表します。 Dartには、頻繁に使用されるルーチンを保存するのに役立つ組み込みライブラリのセットがあります。 Dartライブラリは、クラス、定数、関数、typedef、プロパティ、および例外のセットで構成されます。
ライブラリのインポート
インポートすると、ライブラリ内のコンポーネントが呼び出し元コードで利用可能になります。 importキーワードは、同じことを達成するために使用されます。 dartファイルには、複数のインポートステートメントを含めることができます。
組み込みのDartライブラリURIは、dart:スキームを使用してライブラリを参照します。 他のライブラリは、ファイルシステムパスまたはpackage:スキームを使用してそのURIを指定できます。 pubツールなどのパッケージマネージャーによって提供されるライブラリは、_package:scheme_を使用します。
Dartでライブラリをインポートするための構文は以下のとおりです-
次のコードスニペットを考慮してください-
ライブラリの一部のみを使用する場合は、ライブラリを選択してインポートできます。 同じための構文は以下のとおりです-
一般的に使用されるいくつかのライブラリを以下に示します-
Sr.No | Library & Description |
---|---|
1 |
dart:io サーバーアプリケーションのファイル、ソケット、HTTP、およびその他のI/Oサポート。 このライブラリは、ブラウザベースのアプリケーションでは機能しません。 このライブラリはデフォルトでインポートされます。 |
2 |
dart:core すべてのDartプログラムの組み込み型、コレクション、およびその他のコア機能。 このライブラリは自動的にインポートされます。 |
3 |
dart: math 数学定数と関数、および乱数ジェネレーター。 |
4 |
dart: convert JSONやUTF-8などの異なるデータ表現間で変換するためのエンコーダーとデコーダー。 |
5 |
dart: typed_data 固定サイズのデータ(たとえば、符号なし8バイト整数)を効率的に処理するリスト。 |
例:ライブラリのインポートと使用
次の例では、組み込みライブラリ dart:math をインポートします。 このスニペットは、 math ライブラリーから* sqrt()*関数を呼び出します。 この関数は、渡された数値の平方根を返します。
出力
ライブラリでのカプセル化
Dartスクリプトは、コンポーネントにプライベートマークを付けるために、識別子の前にアンダースコア(_)を付けることができます。 簡単に言えば、Dartライブラリは、外部スクリプトによるコンテンツへのアクセスを制限できます。 これは「カプセル化」と呼ばれます。 同じための構文は以下のとおりです-
構文
例
最初に、プライベート関数でライブラリを定義します。
次に、ライブラリをインポートします
上記のコードはエラーになります。
カスタムライブラリの作成
Dartでは、独自のコードをライブラリとして使用することもできます。 カスタムライブラリの作成には、次の手順が含まれます-
ステップ1:ライブラリの宣言
ライブラリを明示的に宣言するには、* libraryステートメント*を使用します。 ライブラリを宣言するための構文は以下のとおりです-
ステップ2:ライブラリを関連付ける
あなたは2つの方法でライブラリを関連付けることができます-
- 同じディレクトリ内
- 別のディレクトリから
例:カスタムライブラリ
まず、カスタムライブラリ calculator.dart を定義しましょう。
次に、ライブラリをインポートします-
プログラムは、次の*出力*を生成する必要があります-
ライブラリプレフィックス
競合する識別子を持つ2つのライブラリをインポートする場合、一方または両方のライブラリのプレフィックスを指定できます。 プレフィックスを指定するには、 'as' キーワードを使用します。 同じための構文は以下のとおりです-
構文
例
まず、ライブラリを定義しましょう: loggerlib.dart 。
次に、別のライブラリ webloggerlib.dart を定義します。
最後に、プレフィックス付きのライブラリをインポートします。
次の output が生成されます-
Dartプログラミング-非同期
非同期操作*は、 *main アプリケーションスレッドとは別のスレッドで実行されます。 アプリケーションがメソッドを呼び出して操作を非同期的に実行する場合、非同期メソッドがタスクを実行している間、アプリケーションは実行を継続できます。
例
この概念を理解するために例を見てみましょう。 ここで、プログラムは* IOライブラリ*を使用してユーザー入力を受け入れます。
readLineSync()は同期メソッドです。 つまり、 readLineSync()関数呼び出しに続くすべての命令の実行は、 readLineSync()*メソッドの実行が完了するまでブロックされます。
上記の例では、次の*出力*になります-
コンピューティングでは、続行する前にイベントが発生するのを待つとき、何かが*同期*であると言います。 このアプローチの欠点は、コードの一部の実行に時間がかかりすぎると、後続のブロックは無関係ですが実行がブロックされることです。 リソースに対する複数の要求に応答する必要があるWebサーバーを検討します。
同期実行モデルは、現在のリクエストの処理が完了するまで、他のすべてのユーザーのリクエストをブロックします。 そのような場合、Webサーバーのように、すべての要求は他の要求から独立している必要があります。 つまり、ウェブサーバーは、他のユーザーからのリクエストに応答する前に、現在のリクエストの実行が完了するのを待つべきではありません。
簡単に言えば、以前のユーザーの要求を必ず完了する前に、新しいユーザーからの要求を受け入れる必要があります。 これは非同期と呼ばれます。 非同期プログラミングとは、基本的に、待機またはノンブロッキングプログラミングモデルがないことを意味します。 dart:async パッケージは、Dartスクリプトでの非同期プログラミングブロックの実装を容易にします。
例
次の例は、非同期ブロックの機能をよりよく示しています。
ステップ1 *-以下に示す *contact.txt ファイルを作成し、*現在のプロジェクトのデータフォルダーに保存します。
- ステップ2 *-アプリケーションの他の部分をブロックせずにファイルを読み取るプログラムを作成します。
このプログラムの*出力*は次のようになります-
「メインの終わり」が最初に実行され、スクリプトがファイルの読み取りを続けます。 dart:async の一部である Future クラスは、非同期タスクの完了後に計算の結果を取得するために使用されます。 この Future 値は、計算が終了した後に何かをするために使用されます。
読み取り操作が完了すると、実行制御は "then()" 内で転送されます。 これは、読み取り操作に時間がかかるため、プログラムの他の部分をブロックしたくないためです。
Dart Future
Dartコミュニティは、 Future を「将来いつか価値を得るための手段」と定義しています。簡単に言うと、* Futureオブジェクト*は、実行が後で完了する式によって返される値を表すメカニズムです。 非同期メソッドが呼び出されると、Dartの組み込みクラスのいくつかは Future を返します。
Dartはシングルスレッドのプログラミング言語です。 コードが実行スレッドをブロックする場合(たとえば、時間のかかる操作を待機したり、I/Oをブロックしたりするなど)、プログラムは事実上フリーズします。
非同期操作により、ブロックされることなくプログラムを実行できます。 Dartは* Futureオブジェクト*を使用して非同期操作を表します。
Dartプログラミング-並行性
- 同時実行*は、複数の命令シーケンスを同時に実行することです。 複数のタスクを同時に実行する必要があります。
Dartは、並行して作業を行うためのツールとして Isolates を使用しています。 dart:isolate パッケージは、シングルスレッドのDartコードを取得し、アプリケーションが利用可能なハードウェアをより活用できるようにするDartのソリューションです。
例
この概念をよりよく理解するために例を見てみましょう。
ここでは、 Isolate クラスの spawn メソッドにより、コードの残りの部分と並行して関数 foo を実行できます。 *スポーン*関数は2つのパラメータを取ります-
- 生成される関数、および
- 生成された関数に渡されるオブジェクト。
生成された関数に渡すオブジェクトがない場合、NULL値を渡すことができます。
2つの関数*(fooとmain)は毎回同じ順序で実行されるとは限りません。 *foo がいつ実行され、いつ* main()*が実行されるかについての保証はありません。 出力は実行するたびに異なります。
出力1
出力2
出力から、Dartコードは、JavaまたはC#コードが新しいスレッドを開始できるように、実行中のコードから新しい isolate を生成できると結論付けることができます。
注-上記の出力は、ハードウェアおよびオペレーティングシステムの構成によって異なります。
v/s Futureを分離
複雑な計算作業を非同期で行うことは、アプリケーションの応答性を確保するために重要です。 Dart Future は非同期タスクの値を完了後に取得するためのメカニズムであり、* Dart Isolatesは並列処理を抽象化し、実用的な高レベルで実装するためのツールです。
Dartプログラミング-単体テスト
単体テストでは、アプリケーションの個々のユニットをすべてテストします。 開発者が複雑なアプリケーション全体を実行せずに小さな機能をテストするのに役立ちます。
「test」という名前のDart external library は、単体テストを記述および実行する標準的な方法を提供します。
Dartユニットテストには、次の手順が含まれます-
ステップ1:「テスト」パッケージのインストール
現在のプロジェクトにサードパーティパッケージをインストールするには、 pubspec.yaml ファイルが必要です。 テストパッケージ*をインストールするには、まず *pubspec.yaml ファイルに次のエントリを作成します-
エントリを作成したら、 pubspec.yaml ファイルを右クリックして依存関係を取得します。 "test" パッケージがインストールされます。 以下は、 WebStorm エディターでの同じスクリーンショットです。
パッケージは、*コマンドライン*からもインストールできます。 端末に次のように入力します-
ステップ2:「テスト」パッケージのインポート
ステップ3テストの作成
テストはトップレベル関数* test()を使用して指定され、*テストアサーション*は expect()関数を使用して作成されます。 これらのメソッドを使用するには、 *pub 依存関係としてインストールする必要があります。
構文
- group()*関数を使用して、テストをグループ化できます。 各グループの説明は、テストの説明の先頭に追加されます。
構文
例1:テストに合格
次の例では、メソッド* Add()を定義しています。 このメソッドは2つの整数値を取り、 *sum を表す整数を返します。 この* add()*メソッドをテストするには-
ステップ1 *-以下のように *test パッケージをインポートします。
ステップ2 *- test()関数を使用してテストを定義します。 ここで、 test()関数は expect()*関数を使用してアサーションを強制します。
次の output が生成されるはずです-
例2:テストの失敗
以下で定義されている* subtract()メソッドには論理的な誤りがあります。 次の *test は同じことを検証します。
出力-関数* add()のテストケースは合格しますが、以下に示すように subtract()*のテストは失敗します。
テストケースのグループ化
- テストケース*をグループ化して、テストコードにより多くの意味を追加できます。 多くの*テストケース*がある場合、これはよりクリーンなコードを書くのに役立ちます。
指定されたコードでは、* split()関数と *trim 関数のテストケースを記述しています。 したがって、これらのテストケースを論理的にグループ化し、 String と呼びます。
例
出力-出力は、以下に示すように各テストケースのグループ名を追加します-
Dartプログラミング-HTML DOM
すべてのWebページは、オブジェクトと見なすことができるブラウザーウィンドウ内にあります。
- ドキュメントオブジェクト*は、そのウィンドウに表示されるHTMLドキュメントを表します。 Documentオブジェクトには、ドキュメントコンテンツへのアクセスとドキュメントコンテンツの変更を許可する他のオブジェクトを参照するさまざまなプロパティがあります。
ドキュメントのコンテンツにアクセスして変更する方法は、ドキュメントオブジェクトモデル*または *DOM と呼ばれます。 オブジェクトは階層構造になっています。 この階層構造は、Webドキュメント内のオブジェクトの組織に適用されます。
- Window -階層のトップ。 オブジェクト階層の最も外側の要素です。
- ドキュメント-ウィンドウにロードされる各HTMLドキュメントはドキュメントオブジェクトになります。 ドキュメントにはページのコンテンツが含まれています。
- 要素-Webページのコンテンツを表します。 例には、テキストボックス、ページタイトルなどが含まれます。
- ノード-多くの場合要素ですが、属性、テキスト、コメント、その他のDOMタイプも可能です。
ここにいくつかの重要なDOMオブジェクトの単純な階層があります-
Dartは、DOMのオブジェクトと要素を操作するための dart:html ライブラリを提供します。 コンソールベースのアプリケーションは、 dart:html ライブラリを使用できません。 WebアプリケーションでHTMLライブラリを使用するには、 dart:html をインポートします-
次のセクションでは、* DOM操作*について説明します。
DOM要素の検索
- querySelector()関数は、セレクターの指定されたグループに一致する最初の要素を返します。 *"selectors は、以下に示すCSSセレクター構文を使用した文字列でなければなりません
例:DOMの操作
Webstorm IDEで、以下の手順に従ってください-
ステップ1 *-ファイルNewProject→場所で、プロジェクト名を *DemoWebApp として指定します。
ステップ1 *-「サンプルコンテンツの生成」セクションで、 *SimpleWebApplication を選択します。
サンプルプロジェクト DemoWebApp が作成されます。 ダウンロードする必要がある依存関係を含む pubspec.yaml ファイルがあります。
Webに接続している場合、これらは自動的にダウンロードされます。そうでない場合は、 pubspec.yaml を右クリックして依存関係を取得できます。
webフォルダーには、 Indexl、main.dart 、 style.css の3つのファイルがあります。
インデクス
Main.dart
イベント処理
- querySelector()関数は、指定されたDOMから要素を返し、 onClick.listen()は、クリックイベントが発生したときに呼び出される *eventHandler メソッドを取ります。 eventHandler の構文は以下のとおりです-
次に、Dartのイベント処理の概念を理解するための例を取り上げます。