🫠
Dart : int型・double型の概要
はじめまして、たくです。😃😃😃
普段はFlutterエンジニアとしてモバイルアプリの開発に取り組んでいます。
開発を進める中で、ついフレームワークであるFlutterに意識が向きがちですが、実際に使っているプログラミング言語はDartです。
そこで、Dartそのものへの理解を深めるため、今後はDartに関する記事も作成していくことにしました。
今回は、その第1弾として「Built-in Types(基本型)」の中から、Numbers型についてまとめた記事を作成しました。
Built-in Types(基本型)
Dartには以下のような「組み込みの型(Built-in Types)」があります。
- Numbers(int, double) ←←← 今回の記事のテーマ 🚀🚀🚀
- String(文字列型)
- Booleans(真偽値)
- Records(複数の値の組み合わせ)
- Functions(関数)
- List(リスト)
- Set(セット)
- Map(マップ)
- Runes(Unicodeのコードポイント)
- Symbols(シンボル)
- Null(ヌル)
Numbers(数値型)
Dartの数値型には主に2つの型があります:
1. int型(整数)
int型は小数点を持たない「整数」を表す型です。
プラットフォームによって扱える範囲が少し異なります。
■ ネイティブプラットフォーム(iOS / Android)
-
int型は64ビットのメモリ領域を使用します。 - 範囲:-2⁶³ ~ 2⁶³ - 1
(-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807)
■ Flutter Web(JavaScriptへのトランスパイル後)
- JavaScriptでは整数も浮動小数点数として扱われます。
- 範囲:-2⁵³ ~ 2⁵³ - 1
✔ 補足
- 64ビット = 8バイト
- 1バイト = 8ビット
-
int型は64ビット(8バイト)分のメモリを使って整数を扱います。 - Web上では、DartコードはJavaScriptに変換(トランスパイル)され、ブラウザで実行されます。
2. double型(浮動小数点数)
double型は、IEEE 754規格に基づいた64ビット(倍精度)の浮動小数点数です。
小数を扱う際に使用します。
3. num型(intとdoubleの親クラス)
numは、int型とdouble型の親クラスです。
普段の開発で意識することはあまりないかもしれませんが、両方を包括する型として存在しています。
テスト
int型とdouble型の処理速度は違う?
int型とdouble型は同じく64ビット(8バイト)のメモリ領域を使用しますが、構造が異なります。
特にdoubleは浮動小数点を扱うため、演算処理のパフォーマンスが低下する傾向があります。
ただ、「実際どのくらい差が出るのか?」が気になったので、テストアプリを作成して処理速度を比較してみました。
テスト概要
- 100万件の要素を持つリストを生成
- 各要素を2倍にする処理を行う
-
int型とdouble型で同じ処理を実行し、それぞれの処理時間を比較 - フェアな比較のためにウォームアップ処理も実施
テストコード(GitHub)
リポジトリをクローンして、実際に試してみることができます。
テスト結果
👉 エビデンスはこちら(Google Drive)
実際の測定結果からも、int型の方が処理が高速であることが確認できました。
まとめ
-
int型とdouble型は両方とも64ビット(8バイト)のメモリを使用 -
doubleは浮動小数点を扱うため処理がやや遅くなる。 - 実際の差が気になる方は、ぜひテストコードを動かしてみてください!
Discussion