🫠

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)

👉 GitHubリポジトリを見る

リポジトリをクローンして、実際に試してみることができます。

テスト結果

👉 エビデンスはこちら(Google Drive)
実際の測定結果からも、int型の方が処理が高速であることが確認できました。

まとめ

  • int型とdouble型は両方とも64ビット(8バイト)のメモリを使用
  • doubleは浮動小数点を扱うため処理がやや遅くなる。
  • 実際の差が気になる方は、ぜひテストコードを動かしてみてください!

Discussion