Dart 組み込み型

Dart 組み込み基本型一覧表

分類名型識別子記述 / リテラル例簡単な説明
Numbers(数値)int、doubleint a = 10; double b = 3.14;数値は整数・倍精度浮動小数点数の2種類。共通の親クラスは num
Strings(文字列)Stringvar str = "foxdevelop.com";UTF-16文字シーケンスを保存。文字列補間・複数行・生文字列に対応
Booleans(真偽値)boolbool flag = true;取り得る値は true / false の2つのみ
Records(タプルレコード)レコードリテラル (v1, v2)var record = (10, "test");要素数固定の複合型。分割代入に対応
Functions(関数)Functionvoid fn() {} Function func = ()=>1;第一級オブジェクト。変数代入・引数渡し・戻り値として利用可能
Lists(リスト / 配列)Listvar list = [1,2,3];順序付きで重複要素を許可するコレクション。配列と同等
Sets(集合)Setvar set = {1,2,3};順序なし、要素の重複を許可しないコレクション
Maps(キー値マップ)Mapvar map = {"name":"Tom"};キーと値のペアで保存する構造。キーは一意
Runes(Unicodeコードポイント)RunesRunes("\u{1f600}")文字列内部のUnicodeコードポイントを取得する古い方式。公式では characters パッケージの利用を推奨
Null(空値)NullNull n = null;値は null のみ。Null安全機構の最上位基本型

Dart の変数はすべて本質的にオブジェクト(クラスのインスタンス)です。リテラルで簡単に作成するか、対応するコンストラクタを呼び出して初期化できます。

'hello' は文字列リテラル、true は真偽値リテラル;Map() コンストラクタで Map インスタンスを作成します。

言語特殊補助型

組み込み基本型ではないですが、すべて Dart の予約語です。

これらの型は型システム・非同期処理・静的型検査など特殊な役割を担います:

役割説明
ObjectNull を除くすべての Dart クラスの親クラス
Enumすべての列挙型の親クラス
Future / Stream非同期プログラミング専用
Iterablefor-in ループ・同期ジェネレータで使用
Never式が正常に完了しない(常に例外を投げる関数の戻り値に使用)
dynamic静的型検査を無効化。代わりに Object / Object? の使用を推奨
void戻り値なし。関数の戻り型として頻繁に使用

1 Numbers 数値

親クラス:num

数値は2つのサブクラスに分かれます:int(整数)、double(浮動小数点数)。どちらも num を継承

1.1 int 整数

値域の違い(Dart はフロントエンド開発にも対応するためWeb版が存在):

  • ネイティブ環境:-2^63 ~ 2^63 - 1
  • Web(JS基盤):-2^53 ~ 2^53 - 1

小数点なし。10進数、0x 接頭辞の16進数に対応


void main() {
	// 10進整数
	var pageCount = 123;
	
	// 16進数
	var hex = 0xDEADBEEF;
	
	// 数値区切りアンダースコア(Dart 3.6以降、可読性向上)
	var million = 1_000_000;
	var mac = 0x00_14_22_01_23_45;
	
	print(pageCount);
	print(hex);
	print(million);
	print(mac);
}Code language: Dart (dart)

実行結果

123
3735928559
1000000
86469845829

1.2 double 倍精度浮動小数点数

小数点または指数表記を含む

void main() {
	var pi = 3.14; // 小数点
	var raid = 1.61e5; // 1.61 * 10^5 指数表記
	var tiny = 0.000_000_000_02; // 小数のアンダースコア区切り
	
	print(pi);
	print(raid);
	print(tiny);
}Code language: PHP (php)
3.14
161000.0
2e-11Code language: CSS (css)

1.3 親クラス num

num 型変数は int と double どちらの値も保持可能:

void main() {
	num money = 5;
	money += 2.5; // 自動的に double に変換、money = 7.5
	
	// int を double に代入すると自動で 1.0 に変換
	double zoom = 1;
	
	print(money);
	print(zoom);
}Code language: PHP (php)

実行結果

7.5
1.0Code language: CSS (css)

1.4 型相互変換

void main() {
	// String → int
	var one = int.parse('123');


	// String → double
	var pi = double.parse('3.14');

	// int / double → String
	String intStr = 99.toString();
	String pi2 = 3.14159.toStringAsFixed(2); // 小数2桁に丸め → "3.14"

	
	print(one);
	print(pi);
	print(pi2);
}Code language: JavaScript (javascript)

実行結果

123
3.14
3.14Code language: CSS (css)

1.5 int 固有ビット演算子

シフト演算・ビットAND/OR/XOR・ビット反転は int のみ対応。詳細はこちら:Dart Bitwise and shift operators – FoxDevelop

void main() {
	print(3 << 1);  // 左シフト 0011 <<1 → 0110
	print(3 | 4);   // ビットOR
	print(3 & 4);   // ビットAND
	print(~3);       // ビット反転
}Code language: PHP (php)
6
7
0
-4

1.6 数値定数(コンパイル時定数)

純粋な数値リテラル、定数同士の四則演算は const で修飾可能

プログラム実行前のコンパイル段階で固定値が計算済み、実行時に値が変わらず再計算不要な値をコンパイル時定数と呼び、const を付けます。

const msPerSec = 1000;
const waitSec = 5;
const waitMs = waitSec * msPerSec; // コンパイル時定数Code language: JavaScript (javascript)

const:コンパイル時定数。プログラム起動前にコンパイラが式を計算し、固定値をバイナリファイルに埋め込む。実行時は読み出すだけで計算しない。

final:実行時定数(実行時に一度値を代入、その後変更不可)。実行時に値を設定でき、2回目の代入は禁止。

1.7 標準搭載数学メソッド

num 型に標準実装。複雑な計算は dart:math を利用

abs()ceil()floor()round() など

num n = -3.6;
print(n.abs()); // 3.6
print(n.ceil()); // -3
print(n.floor()); // -4Code language: PHP (php)

2. String 文字列

UTF-16 コードの文字シーケンスでテキストを表現。シングルクォート、ダブルクォート2種類の記法がある。

2.1 定義方法:シングル / ダブルクォート

var s1 = 'シングルクォート文字列';
var s2 = "ダブルクォート文字列";

// エスケープ文字
var s3 = 'It\'s ok';
var s4 = "It's ok"; // クォート種類を切り替えるとエスケープ不要
Code language: JavaScript (javascript)

文字列内には特殊な意味を持つ文字(ダブルクォート "、改行、バックスラッシュ \)が存在し、そのまま記述すると文字列構文が崩れコンパイラエラーになります。

エスケープ文字 \ は文字の特殊意味を打ち消したり、目に見えない制御文字を出力するために使います。

キーボードのEnter、Tabなどは画面に表示されないため、\t のようなエスケープシーケンスで表現します。下記コードを実行すると動作が分かります。

  print("name\tage\tcountry");
  print("Jack\t18\tUSA");
  print("Lucy\t20\tEgypt");Code language: PHP (php)

2.2 文字列補間 ${式}

  • 単純な変数は波括弧を省略可能:$変数
  • オブジェクトは自動的に .toString() を呼び出す
void main() {
	var word = "interpolation";
	var str1 = "Dart には $word 機能がある";
	var str2 = "大文字:${word.toUpperCase()}";
	print(str2); //大文字:INTERPOLATION
}Code language: JavaScript (javascript)

2.3 文字列連結

  1. 隣接するリテラルは自動連結(改行を挟んでもOK)
  2. + 演算子による連結
var s1 = "1行目"
    "2行目";
var s2 = "a" + "b";
assert(s1 == "1行目2行目");
assert(s2 == "ab");Code language: JavaScript (javascript)

2.4 複数行文字列:3連クォート ”’ / “””

void main() {
	var multi1 = '''
	複数行
	テキスト
	''';

	var multi2 = """
	ダブル3連クォート複数行
	hello foxdevelop.com
	""";
	
	print(multi1);
	print(multi2);

}Code language: PHP (php)
        複数行
        テキスト

        ダブル3連クォート複数行
        hello foxdevelop.comCode language: CSS (css)

3連シングル内にダブルクォート、3連ダブル内にシングルクォートを記述する場合、エスケープ不要:

2.5 生文字列 r”” エスケープ文字を無効化

var raw = r"改行記号 \n は処理されない";
print(raw); // \n がそのまま出力される
Code language: PHP (php)

2.6 const 定数文字列の制限

補間に使用する値はコンパイル時定数(数値・bool・定数文字列)のみ許可。通常変数・コレクションは使用不可

const num cNum = 10;
const bool cBool = true;
const String cStr = "const";
// 正常な定数文字列
const valid = "$cNum $cBool $cStr";

var normalNum = 10;
// 不正:補間に定数以外の変数を含む 
// const invalid = "$normalNum";
Code language: JavaScript (javascript)

3. bool 真偽型

インスタンスは true / false の2種類のみ、どちらもコンパイル時定数

Dart は強い型付けルール:数値や文字列などを直接真偽判定に使えず、明示的な比較が必須

void main() {
	var emptyStr = "";
	print(emptyStr.isEmpty); // 空文字列判定

	var zero = 0;
	print(zero == 0); // ゼロ判定

	var nil = null;
	print(nil == null); // null判定

	var nan = 0 / 0;
	print(nan.isNaN); // 非数値判定

}Code language: PHP (php)

4. Runes & characters Unicode文字処理

  1. Runes:文字列内部のUnicodeコードポイントを直接取得する古い手法
  2. 推奨 package:characters:視覚的に1文字となるグラフェムクラスタ(国旗絵文字など)を正しく処理

Unicode エスケープ記法

  • 4桁16進数:\uXXXX
  • 4桁を超える大きなコードポイント:\u{16進数}
var heart = "\u2665"; // ♥
var laugh = "\u{1f606}"; // 😆
Code language: JavaScript (javascript)

characters パッケージ例

import 'package:characters/characters.dart';
void main() {
  var text = "Hi 🇩🇰";
  print(text.characters.last); // デンマーク国旗絵文字を完全出力
}
Code language: JavaScript (javascript)

5. Symbol シンボル型

リフレクション・コード難読化に使用。リテラル記法 #識別子、コンパイル時定数

難読化処理を実行しても Symbol は変更されないため、名称から動的に識別子を参照する場面に適しています。

#userName
#getData
Code language: CSS (css)

6. Null 空値型

取り得る値は null のみ。Null安全機構において Null は独立した最上位型で、すべてのNullable型と互換性があります。

String? name = null;
Null n = null;
Code language: JavaScript (javascript)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です