Numbers
Kotlinの数値型はJavaに合わせて用意されています。明らかなJavaScriptとの差異があるのはそのためです。
数値型 | Kotlin | C# |
---|---|---|
符号有り1byte整数 | Byte | sbyte |
符号無し1byte整数 | ※UByte | byte |
符号有り2byte整数 | Short | short |
符号無し2byte整数 | ※UShort | ushort |
符号有り4byte整数 | Int | int |
符号無し4byte整数 | ※UInt | uint |
符号有り8byte整数 | Long | long |
符号無し8byte整数 | ※ULong | ulong |
4byte浮動小数点 | Float | float |
8byte浮動小数点 | Double | double |
16byte浮動小数点 | decimal |
※Kotlin 1.3で実験的に追加される型: KEEP
現時点ではKotlinよりもC#のほうが数値型は非常に多く用意されています。Kotlin 1.3で実験的に追加される符号無し整数は疑似的に再現されているようなので、ULongの場合はLongの整数領域を超える場合があるので、個人的にパフォーマンス上の懸念があります
また、16byte浮動小数点を表すdecimalという便利な型がC#には存在していますが、この型は単に数値の範囲を広くしたものではなく、より正確な計算をするための型です。そのため、むしろdoubleより扱える範囲は狭かったりします。
Literal Constants
リテラル | Kotlin | C# |
---|---|---|
2進数リテラル | prefix 0b | prefix 0b |
16進数リテラル | prefix 0x | prefix 0x |
符号有り8byte整数リテラル | postfix L | postfix L |
符号無し8byte整数リテラル | postfix UL | |
4byte浮動小数点リテラル | postfix F | postfix F |
8byte浮動小数点リテラル | postfix D | |
16byte浮動小数点リテラル | postfix M |
C#でのpostfixな数値リテラルは実際には少し複雑な仕様ですが、簡略化した表記をしています。
Underscores in numeric literals
Kotlin 1.1から追加されたアンダースコアによる数値リテラル区切りですが、C# 7.xで順次機能追加されました。
class SeparateNumber { private readonly int n10000 = 1_0000; private readonly int hex = 0x_FF_FF; }
Representation
Kotlinでのnullableな数値型はJavaには存在しないため、box化されます。そのため、box化された値は必ずしも同値扱いされるとは限りませんが、C#ではNullable構造体によって(値型に対する)null許容型が提供されるため、Kotlinのような心配は必要ありません。
Explicit Conversions
Kotlinでは数値型の変換をtoInt()
などの関数によって明示的に行いますが、C#ではより大きな型に対する変換は暗示的に行うことができます。
Operations
Kotlinでは演算子に別名が付けられていたりしますが、C#には別名はつけられていません。そのため、Java/Cのように記号の演算子を使います。
Floating Point Numbers Comparison
略
Characters
Kotlinと同様にC#も文字リテラルはシングルクォート'で囲みます。 また、C#の文字リテラルはUTF16による16bit整数で表されます。
型の対応表は以下の通りです。
型 | Kotlin | C# |
---|---|---|
文字型 | Char | char |
Booleans
KotlinとC#の真偽値型に大差はありません。
型の対応表は以下の通りです。
型 | Kotlin | C# |
---|---|---|
真偽値型 | Boolean | bool |
Arrays
KotlinでのArrayはArray<T>
とプリミティブ型に対するArray(IntArray
など)が用意されていましたが、C#はJavaのような記法です。
class Array { public readonly int[] Empty = new int[0]; // 初期値を与える場合 public readonly int[] Default = new int[] { 1, 2, 3, 4 }; // JavaやKotlinで多次元配列と呼ばれていたものはジャグ配列と呼ばれる public readonly int[][] JaggedArray = new int[10][]; // C#には多次元配列が存在する public readonly int[,] MultiDimensionalArray = new int[10, 10]; }
また、C#には多次元配列が存在します。いわゆる配列の配列との違いは、要素が長方形または正方形になるように並べられていることです。(ジャグ配列は棒グラフのように配置されるイメージ)
Strings
C#の文字列型はKotlinの文字列型と同じくUTF-16な不変オブジェクトです。
型の対応表は以下の通りです。
型 | Kotlin | C# |
---|---|---|
文字列型 | String | string |
String Literals, String Templates
C#ではRawStringには文字列リテラルの先頭に@
を追加します。
また、文字列テンプレートは文字列補間と呼ばれ、文字列リテラルの先頭に$
を付け補間するものを{}
で囲います。
class StringLiteral { public const string Text = "text"; public readonly string RawText = @"Hello, World!! "; public readonly string Title = $"Text: {Text}"; }
文字列補間は非常に強力な機能ですが、詳しくはドキュメントを参照してください。
また、C#では現在RawStringと文字列補間を同時に利用することができませんが、C# 8.0以降でサポートされる予定です。