組み込み型
Dart 言語は、以下のものに特別なサポートを提供しています。
- 数値 (int,double)
- 文字列 (String)
- ブール値 (bool)
- レコード ((value1, value2))
- 関数 (Function)
- リスト (List、配列とも呼ばれます)
- セット (Set)
- マップ (Map)
- Unicode コードポイント (Runes、多くの場合charactersAPI で置き換えられます)
- シンボル (Symbol)
- null値 (- Null)
このサポートには、リテラルを使用してオブジェクトを作成する機能が含まれます。たとえば、'this is a string' は文字列リテラルであり、true はブール値リテラルです。
Dart ではすべての変数がオブジェクト、つまりクラスのインスタンスを参照しているため、通常はコンストラクタを使用して変数を初期化できます。一部の組み込み型には独自のコンストラクタがあります。たとえば、Map() コンストラクタを使用してマップを作成できます。
その他いくつかの型も Dart 言語で特別な役割を果たします。
- Object:- Nullを除くすべての Dart クラスのスーパークラス。
- Enum: すべての列挙型 (enum) のスーパークラス。
- Futureおよび- Stream: 非同期プログラミングで使用されます。
- Iterable: for-in ループや同期的な ジェネレータ関数で使用されます。
- Never: 式が正常に評価を完了できないことを示します。例外を常にスローする関数に最もよく使用されます。
- dynamic: 静的チェックを無効にしたいことを示します。通常は代わりに- Objectまたは- Object?を使用する必要があります。
- void: 値が使用されないことを示します。戻り値の型としてよく使用されます。
Object、Object?、Null、および Never クラスは、クラス階層で特別な役割を果たします。これらの役割については、null 安全性の理解を参照してください。
数値
#Dart の数値には 2 つのタイプがあります。
- int
- 64 ビットまでの整数値。プラットフォームによっては、プラットフォームに依存します。ネイティブプラットフォームでは、値は -263 から 263 - 1 まで可能です。Web では、整数値は JavaScript の数値 (小数部分のない 64 ビット浮動小数点値) として表され、-253 から 253 - 1 まで可能です。
- double
- IEEE 754 標準で指定された 64 ビット (倍精度) 浮動小数点数。
int と double は両方とも num のサブタイプです。num 型には、+, -, /, * などの基本的な演算子が含まれており、abs()、ceil()、floor() などのメソッドもあります。(ビット演算子、たとえば >> は int クラスで定義されています。) num およびそのサブタイプに必要なものがない場合は、dart:math ライブラリが役立つかもしれません。
整数は小数点のない数値です。整数リテラルの定義例を以下に示します。
var x = 1;
var hex = 0xDEADBEEF;数値に小数点が含まれる場合は、double です。double リテラルの定義例を以下に示します。
var y = 1.1;
var exponents = 1.42e5;変数を num として宣言することもできます。こうすると、その変数は整数値と double 値の両方を持つことができます。
num x = 1; // x can have both int and double values
x += 2.5;整数リテラルは、必要に応じて自動的に double に変換されます。
double z = 1; // Equivalent to double z = 1.0.文字列を数値に、またはその逆に変換する方法を以下に示します。
// String -> int
var one = int.parse('1');
assert(one == 1);
// String -> double
var onePointOne = double.parse('1.1');
assert(onePointOne == 1.1);
// int -> String
String oneAsString = 1.toString();
assert(oneAsString == '1');
// double -> String
String piAsString = 3.14159.toStringAsFixed(2);
assert(piAsString == '3.14');int 型は、従来のビットシフト (<<、>>、>>>)、補数 (~)、AND (&)、OR (|)、XOR (^) 演算子を指定します。これらは、ビットフィールド内のフラグを操作およびマスクするのに役立ちます。例:
assert((3 << 1) == 6); // 0011 << 1 == 0110
assert((3 | 4) == 7); // 0011 | 0100 == 0111
assert((3 & 4) == 0); // 0011 & 0100 == 0000その他の例については、ビット演算子とシフト演算子のセクションを参照してください。
数値リテラルはコンパイル時定数です。多くの算術式もコンパイル時定数です。ただし、オペランドが数値に評価されるコンパイル時定数である場合に限ります。
const msPerSecond = 1000;
const secondsUntilRetry = 5;
const msUntilRetry = secondsUntilRetry * msPerSecond;詳細については、Dart の数値を参照してください。
1 つ以上のアンダースコア (_) を桁区切り文字として使用すると、長い数値リテラルをより読みやすくできます。複数の桁区切り文字を使用すると、より高レベルのグループ化が可能になります。
var n1 = 1_000_000;
var n2 = 0.000_000_000_01;
var n3 = 0x00_14_22_01_23_45; // MAC address
var n4 = 555_123_4567; // US Phone number
var n5 = 100__000_000__000_000; // one hundred million million!文字列
#Dart の文字列 (String オブジェクト) は、UTF-16 コードユニットのシーケンスを保持します。単一引用符または二重引用符のいずれかを使用して文字列を作成できます。
var s1 = 'Single quotes work well for string literals.';
var s2 = "Double quotes work just as well.";
var s3 = 'It\'s easy to escape the string delimiter.';
var s4 = "It's even easier to use the other delimiter.";${expression} を使用して、文字列内に式の値を埋め込むことができます。式が識別子の場合、{} を省略できます。オブジェクトに対応する文字列を取得するために、Dart はオブジェクトの toString() メソッドを呼び出します。
var s = 'string interpolation';
assert(
  'Dart has $s, which is very handy.' ==
      'Dart has string interpolation, '
          'which is very handy.',
);
assert(
  'That deserves all caps. '
          '${s.toUpperCase()} is very handy!' ==
      'That deserves all caps. '
          'STRING INTERPOLATION is very handy!',
);隣接する文字列リテラルまたは + 演算子を使用して、文字列を連結できます。
var s1 =
    'String '
    'concatenation'
    " works even over line breaks.";
assert(
  s1 ==
      'String concatenation works even over '
          'line breaks.',
);
var s2 = 'The + operator ' + 'works, as well.';
assert(s2 == 'The + operator works, as well.');複数行の文字列を作成するには、単一引用符または二重引用符のいずれかを使用したトリプルクォートを使用します。
var s1 = '''
You can create
multi-line strings like this one.
''';
var s2 = """This is also a
multi-line string.""";文字列の前に r を付けて「生の」文字列を作成できます。
var s = r'In a raw string, not even \n gets special treatment.';文字列で Unicode 文字を表現する方法の詳細については、Unicode コードポイントとグラフェムクラスタを参照してください。
文字列リテラルはコンパイル時定数です。ただし、補間された式は null、数値、文字列、またはブール値に評価されるコンパイル時定数である必要があります。
// These work in a const string.
const aConstNum = 0;
const aConstBool = true;
const aConstString = 'a constant string';
// These do NOT work in a const string.
var aNum = 0;
var aBool = true;
var aString = 'a string';
const aConstList = [1, 2, 3];
const validConstString = '$aConstNum $aConstBool $aConstString';
// const invalidConstString = '$aNum $aBool $aString $aConstList';文字列の使用方法の詳細については、文字列と正規表現を確認してください。
ブール値
#ブール値を表すために、Dart には bool という名前の型があります。型 bool を持つオブジェクトは 2 つだけです。ブール値リテラルの true と false です。これらは両方ともコンパイル時定数です。
Dart の型安全性により、if (nonbooleanValue) や assert (nonbooleanValue) のようなコードを使用することはできません。代わりに、次のように明示的に値をチェックしてください。
// Check for an empty string.
var fullName = '';
assert(fullName.isEmpty);
// Check for zero.
var hitPoints = 0;
assert(hitPoints == 0);
// Check for null.
var unicorn = null;
assert(unicorn == null);
// Check for NaN.
var iMeantToDoThis = 0 / 0;
assert(iMeantToDoThis.isNaN);Unicode コードポイントとグラフェムクラスタ
#Dart では、runes が文字列の Unicode コードポイントを公開します。ユーザーが認識する文字、またはUnicode (拡張) グラフェムクラスタを表示または操作するには、characters パッケージを使用できます。
Unicode は、世界中のすべての文字体系で使用される各文字、数字、記号に一意の数値値を定義しています。Dart 文字列は UTF-16 コードユニットのシーケンスであるため、文字列内で Unicode コードポイントを表現するには特別な構文が必要です。Unicode コードポイントを表現する通常の簡単な方法は \uXXXX です。XXXX は 4 桁の 16 進数です。たとえば、ハートの文字 (♥) は \u2665 です。4 桁未満または 4 桁より多い 16 進数を指定するには、値を中括弧に囲みます。たとえば、笑っている絵文字 (😆) は \u{1f606} です。
個々の Unicode 文字を読み書きする必要がある場合は、characters パッケージによって String に定義されている characters getter を使用します。返される Characters オブジェクトは、グラフェムクラスタのシーケンスとしての文字列です。characters API の使用例を以下に示します。
import 'package:characters/characters.dart';
void main() {
  var hi = 'Hi 🇩🇰';
  print(hi);
  print('The end of the string: ${hi.substring(hi.length - 1)}');
  print('The last character: ${hi.characters.last}');
}環境によっては、出力は次のようになります。
dart run bin/main.dart
Hi 🇩🇰
The end of the string: ???
The last character: 🇩🇰strings を操作するために characters パッケージを使用する方法の詳細については、characters パッケージの例およびAPI リファレンスを参照してください。
シンボル
#Symbol オブジェクトは、Dart プログラムで宣言された演算子または識別子を表します。シンボルを常に使用する必要はありませんが、識別子を名前で参照する API にとっては非常に重要です。なぜなら、ミニフィケーションは識別子の名前を変更しますが、識別子のシンボルは変更しないからです。
識別子のシンボルを取得するには、シンボルリテラルを使用します。これは、# の後に識別子を続けたものです。
#radix
#barシンボルリテラルはコンパイル時定数です。