Dartのデータ型

プログラミング言語の最も基本的な特徴の1つは、サポートしているデータ型です。これらは、プログラミング言語で表現および操作できる値の型です。

Dart言語は以下の型をサポートしています。

数値
文字列
ブール値
リスト(配列のようです)
集合
マッピング
ルーン(文字列でUnicode文字を表すために使用されます)
シンボル

数値型

Dartの数値型は、数値を表すために使用されます。Dartには2種類の数値型があります。

整数 – 整数値は小数点のない値を表します。例えば、10は整数です。整数リテラルを表すには、intキーワードを使用します。
倍精度数 – Dartは小数点付きの値もサポートします。DartにあるDoubleデータ型は、64ビット(倍精度)浮動小数点数を表します。例えば、10.10です。キーワードdoubleは、浮動小数点テキストを表すために使用されます。

整数は小数点のない数値です。整数リテラルを定義する実例を以下に示します。

var x = 123;
var hex = 0xDEADBEEF;

数値に小数が含まれている場合、倍精度の数値です。倍精度数リテラルを定義する実例を以下に示します。

var y = 1.199;
var exponents = 1.42e5;
Dart
Dart 2.1以降、整数リテラルは必要に応じて自動的に倍精度数に変換できます。
double z = 10; //  double z = 10.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(|)演算子を指定します。例えば:

assert((3 << 1) == 6); // 0011 << 1 == 0110
assert((3 >> 1) == 1); // 0011 >> 1 == 0001
assert((3 | 4) == 7); // 0011 | 0100 == 0111
Dart

リテラル数はコンパイル時の定数です。オペランドが数値にコンパイルされ、コンパイル時定数である限り、多くの算術式はコンパイル時定数です。

const msPerSecond = 1000;
const secondsUntilRetry = 5;
const msUntilRetry = secondsUntilRetry * msPerSecond;

文字列

文字列は一連の文字を表します。例えば、名前や住所などのデータを保存する場合は、文字列型を使用する必要があります。Dart文字列は、一連のUTF-16コードユニットです。ルーンは、UTF-32コードユニットのシーケンスを表すために使用されます。

キーワードStringは、文字列リテラルを表すために使用され、文字列値は一重引用符または二重引用符で囲まれています。したがって、一重引用符または二重引用符を使用して文字列を作成できます。

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!');
Dart

隣接する文字列リテラルまたは+演算子を使用して、文字列を連結できます。

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.';

リテラル文字列はコンパイル時定数です。補間式がコンパイル時定数である限り、その値はnullまたは数値、文字列またはブール値です。

//  const 文字列内に存在する
const aConstNum = 0;
const aConstBool = true;
const aConstString = 'a constant string';

//  const 文字列内に存在しない
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のブール型を使用できます。ブール型には2つのオブジェクトがあります。ブールリテラルはtrueとfalseであり、どちらもコンパイル時定数です。

Dartの型安全性では、if(nonbooleanValue)やassert(nonbooleanValue)などのコードを使用できません。以下のように、値を明示的にチェックする必要があります。

// 空白の文字列をチェックする
var fullName = '';
assert(fullName.isEmpty);

// ゼロ値をチェックする
var hitPoints = 0;
assert(hitPoints <= 0);

// nullであるかどうかをチェックする
var unicorn;
assert(unicorn == null);

// NaNをチェックする
var iMeantToDoThis = 0 / 0;
assert(iMeantToDoThis.isNaN);

リスト型

ほとんどすべてのプログラミング言語でよく見える集合は、配列またはオブジェクトの順序付けられたグループです。Dartでは、配列はListオブジェクトであるため、リストと呼ばれます。

DartリストのテキストはJavaScriptの配列テキストに似てます。以下のはシンプルなDartリストです。

var list = [1, 2, 3];

リストは0から始まるインデックスを使用します。ここで、0は最初の要素のインデックスであり、list.length-1は最後の要素のインデックスです。リストの長さを取得し、JavaScriptのようにリスト要素を参照できます。

var list = [1, 2, 3];
assert(list.length == 3);
assert(list[1] == 2);

list[1] = 1;
assert(list[1] == 1);

コンパイル時定数のリストを作成するには、リストテキストの前にconstを追加します。

var constantList = const [1, 2, 3];
// constantList[1] = 1; // Uncommenting this causes an error.

Dart 2.3では、スプレッド演算子(…)とnull値対応のスプレッド演算子(…?)が導入されました。これらは、集合に複数の要素を挿入する簡単な方法を提供します。

例えば、スプレッド演算子(…)を使用して、リストのすべての要素を別のリストに挿入します。

var list = [1, 2, 3];
var list2 = [0, ...list];
assert(list2.length == 4);

スプレッド演算子の右側の式がnullの可能性がある場合は、nullをサポートするスプレッド演算子(…?)を使用して、例外を回避できます。

var list;
var list2 = [0, ...?list];
assert(list2.length == 1);

Dart 2.3では、ifとcollectionの集合も導入されました。これは、条件(if)とループ(for)で集合を構築するために使用できます。

以下は、3つまたは4つのアイテムのリストを作成する場合の集合の実例です。

var nav = [
  'Home',
  'Furniture',
  'Plants',
  if (promoActive) 'Outlet'
];

これは、集合を使用してリストアイテムを操作し、それらを別のリストの前に追加する実例です。

var listOfInts = [1, 2, 3];
var listOfStrings = [
  '#0',
  for (var i in listOfInts) '#$i'
];
assert(listOfStrings[1] == '#1');

集合

DartにあるSetは、注文されていないユニークなアイテムの集合です。 Dartは、SetテキストおよびSet型によって提供される集合をサポートしています。以下は、setテキストを使用して作成された単純なDartセットです。

var halogens = {'yiibai.com', 'chlorine', 'bromine', 'iodine', 'astatine'};

空集合を作成するには、{}の前に型のパラメータを付けて、またはSet型の変数に{}を割り当てます。

var names = <String>{};
Set<String> names = {}; // This works, too.
//var names = {}; // Creates a map, not a set.

add()またはaddAll()メソッドを使用して、既存の集合にアイテムを追加します。

var elements = <String>{};
elements.add('fluorine');
elements.addAll(halogens);

.lengthを使用して、集合内のアイテムの個数を取得します。

var elements = <String>{};
elements.add('fluorine');
elements.addAll(halogens);
assert(elements.length == 5);

コンパイル時定数の集合を作成するには、setテキストの前にconstを追加します。

final constantSet = const {
  'fluorine',
  'chlorine',
  'bromine',
  'iodine',
  'astatine',
};
// constantSet.add('helium'); // Uncommenting this causes an error.

マッピング

通常、マッピングはキーと値を関連付けるオブジェクトです。キーと値はどちらも任意のタイプのオブジェクトにすることができます。各キーは1回だけ表示されますが、同じ値を複数回使用できます。 Dartは、マッピングテキストとMap型によって提供されるマッピングをサポートしています。

以下のはマッピングテキストで作成された、いくつかの簡単なDartマッピングです。

var gifts = {
  // Key:    Value
  'first': 'partridge',
  'second': 'turtledoves',
  'fifth': 'golden rings'
};

var nobleGases = {
  2: 'helium',
  10: 'neon',
  18: 'argon',
};

Mapコンストラクタを使用して、同じオブジェクトを作成できます。

var gifts = Map();
gifts['first'] = 'partridge';
gifts['second'] = 'turtledoves';
gifts['fifth'] = 'golden rings';

var nobleGases = Map();
nobleGases[2] = 'helium';
nobleGases[10] = 'neon';
nobleGases[18] = 'argon';

JavaScriptの場合と同様に、新しいキーと値のペアを既存のマッピングに追加します。

var gifts = {'first': 'partridge'};
gifts['fourth'] = 'calling birds'; // Add a key-value pair

JavaScriptの場合と同じやり方で、マッピングから検索値を取得します。

var gifts = {'first': 'partridge'};
assert(gifts['first'] == 'partridge');

マッピングにないキーを検索する場合、nullが返されます。

var gifts = {'first': 'partridge'};
assert(gifts['fifth'] == null);

.lengthを使用して、マッピング内のキーと値のペアの個数を取得します。

var gifts = {'first': 'partridge'};
gifts['fourth'] = 'calling birds';
assert(gifts.length == 2);

コンパイル時定数のマッピングを作成するには、mapテキストの前にキーワードconstを追加します。

final constantMap = const {
  2: 'helium',
  10: 'neon',
  18: 'argon',
};

// constantMap[2] = 'Helium'; // Uncommenting this causes an error.

ルーン

Dartでは、ルーンは文字列のUTF-32コードポイントです。

Unicodeは、世界中のすべての書記体系で使用される文字、数字、記号ごとに一意の値を定義します。Dart文字列はUTF-16コードユニットのシーケンスであるため、文字列で32ビットのUnicode値を表すには特別な構文が必要です。

Stringクラスには、ルーン情報を抽出するために使用できるいくつかの属性があります。codeUnitAt属性とcodeUnit属性は、16ビットのコード単位を返します。文字列のルーンを取得するには、runes属性を使用します。

次の実例では、ルーン、16ビットコードユニット、および32ビットコードポイント間の関係を示しています。

  print(clapping.codeUnits);
  print(clapping.runes.toList());

  Runes input = new Runes(
      '\u2665  \u{1f605}  \u{1f60e}  \u{1f47b}  \u{1f596}  \u{1f44d}');
  print(new String.fromCharCodes

シンボル

Symbolオブジェクトは、Dartプログラムで宣言された演算子または識別子を表します。シンボルを使用する必要はないかもしれませんが、ミニファイは識別子シンボルを変更せずに識別子名を変更するため、名前で識別子を参照するAPIには非常に便利です。

識別子のシンボルを取得するには、シンボルリテラルを使用します。これは、#の後に識別子が続くだけです。

#radix
#bar

シンボルリテラルはコンパイル時の定数です。

Share

コメントを残す

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