Nimチュートリアル【七】
4168 ワード
国内初のNimに関するチュートリアルです
まずくだらないことを言う
とても楽しくて、今日の午前1時過ぎに手に入れました.
nim-lang.com;nim-lang.cn;nim-lang.net
この3つのドメイン名は、投資のためではなく、nim-lang.comでコミュニティを作るつもりです.
国内にこのことを後援する人や機関がいるかどうか分からない.
せいけい
Nim言語には10種類の整数型があります
int;int8;int16;int32;int64;uint;uint8;uint16;uint32;uint64
デフォルトの整数タイプはintです
次のコードのように、接尾辞を使用して整数型のタイプを設定できます.
整形タイプはメモリ内のオブジェクトの計算によく使われるため
だから整形の大きさはポインタの大きさと同じです
一般的なオペレータ
+ - * div mod < <= == != > >=
整形にも使えます
ビット単位で計算されるオペレータもあります.
and or xor not
フルサイズにも使えます
shlオペレータは左シフト操作を完了できます
shrオペレータは右シフト操作を完了できます
シフト操作は一般的にターゲットを無記号の整形として扱う
シフト操作は乗算または除算操作を招くことが多いため
シンボルのないオペランドでは、オペレータが二次カプセル化されており、メモリの漏洩やオーバーフローの問題は発生しません.
式で異なるタイプの整数を使用すると、タイプが変換されます.
幅の小さいタイプは幅の大きいタイプに変換されます
整形は自動的に浮動小数点タイプに変換されません
同様に、浮動小数点タイプも自動的に整形に変換されません.
toIntメソッドとtoFloatメソッドは、この2つのタイプの変換操作を処理するために使用できます.
浮動小数点の種類
浮動小数点タイプは3種類あります
float float32 float64
デフォルトの浮動小数点タイプはfloatであり、現在のNim実装ではfloatタイプは常に64ビットである.
浮動小数点タイプの幅を接尾辞で設定することもできます.次のコードを見てください.
+ - * / < <= == != > >=
これらのオペレータは、浮動小数点タイプ(IEEE規格に準拠)にも使用できます.
整数タイプと同様に、異なる幅の浮動小数点タイプが式に現れるとき
幅の小さい浮動小数点タイプは、幅の大きい浮動小数点タイプにフォーマットされます.
整形は自動的に浮動小数点タイプに変換されません
同様に、浮動小数点タイプも自動的に整形に変換されません.
toIntメソッドとtoFloatメソッドは、この2つのタイプの変換操作を処理するために使用できます.
タイプ変換
基本データ型のキーワード自体が方法であり、フォーマット変換を完了することができます.
次のコードのように:
$オペレータとreprメソッド
nimの内蔵タイプは$オペレータでデータを文字列にフォーマットできます
ただし、いくつかの高度なタイプ、またはユーザーがカスタマイズしたタイプについては
$はどうしようもありません(これらのタイプに$オペレータを再定義しない限り)
デバッグ時に複雑なタイプの値を見たいだけです
この複雑なタイプに$オペレータを定義するたびに、面倒です.
このときreprメソッドを使うことができます
reprメソッドは任意のタイプに適用でき、自己関連タイプでも問題ありません.
次のコードを見てみましょう
注意repr(mystring)の時、彼のメモリアドレスも出力されました
キーワードtype
Nimでは、typeキーワードを使用してタイプを定義し、次のコードを見てください.
オブジェクトタイプと列挙タイプもtypeキーワードで定義されます
列挙タイプ
列挙タイプは、秩序化された値シーケンスを定義します.
値シーケンスの各値は整数です.
1番目の値は0、2番目の値は1で、順番に類推します.
列挙タイプの変数は、このシーケンス値の1つにのみ割り当てられます.
セグメントコードを見てみましょう.
上のコードで定義した変数xのタイプはDirectionです
注意:最後の行のコード出力の内容は2ではなくsouthです.
ordメソッドを使用すると、列挙変数の値が得られます
比較に関連するすべてのオペレータは、列挙変数に使用できます.
次のコードのように、点オペレータを使用して曖昧さを回避できます.
他の言語との互換性を向上させるために、列挙タイプで定義された記号を特定の値に指定できます.
ただし、特定の値を指定する場合は、必ずサイズ順に指定してください.
もしあなたが1つの記号の値を明確に与えていないならば、この記号の値は彼の前の記号の値に更に1をプラスします
次のコード例を見てみましょう.
はい、今日はここまでにします.好きな人はお勧めしてください.
まずくだらないことを言う
とても楽しくて、今日の午前1時過ぎに手に入れました.
nim-lang.com;nim-lang.cn;nim-lang.net
この3つのドメイン名は、投資のためではなく、nim-lang.comでコミュニティを作るつもりです.
国内にこのことを後援する人や機関がいるかどうか分からない.
せいけい
Nim言語には10種類の整数型があります
int;int8;int16;int32;int64;uint;uint8;uint16;uint32;uint64
デフォルトの整数タイプはintです
次のコードのように、接尾辞を使用して整数型のタイプを設定できます.
let
x = 0 # x int
y = 0'i8 # y int8
z = 0'i64 # z int4
u = 0'u # u intuint
整形タイプはメモリ内のオブジェクトの計算によく使われるため
だから整形の大きさはポインタの大きさと同じです
一般的なオペレータ
+ - * div mod < <= == != > >=
整形にも使えます
ビット単位で計算されるオペレータもあります.
and or xor not
フルサイズにも使えます
shlオペレータは左シフト操作を完了できます
shrオペレータは右シフト操作を完了できます
シフト操作は一般的にターゲットを無記号の整形として扱う
シフト操作は乗算または除算操作を招くことが多いため
シンボルのないオペランドでは、オペレータが二次カプセル化されており、メモリの漏洩やオーバーフローの問題は発生しません.
式で異なるタイプの整数を使用すると、タイプが変換されます.
幅の小さいタイプは幅の大きいタイプに変換されます
整形は自動的に浮動小数点タイプに変換されません
同様に、浮動小数点タイプも自動的に整形に変換されません.
toIntメソッドとtoFloatメソッドは、この2つのタイプの変換操作を処理するために使用できます.
浮動小数点の種類
浮動小数点タイプは3種類あります
float float32 float64
デフォルトの浮動小数点タイプはfloatであり、現在のNim実装ではfloatタイプは常に64ビットである.
浮動小数点タイプの幅を接尾辞で設定することもできます.次のコードを見てください.
var
x = 0.0 # x float
y = 0.0'f32 # y float32
z = 0.0'f64 # z float64
+ - * / < <= == != > >=
これらのオペレータは、浮動小数点タイプ(IEEE規格に準拠)にも使用できます.
整数タイプと同様に、異なる幅の浮動小数点タイプが式に現れるとき
幅の小さい浮動小数点タイプは、幅の大きい浮動小数点タイプにフォーマットされます.
整形は自動的に浮動小数点タイプに変換されません
同様に、浮動小数点タイプも自動的に整形に変換されません.
toIntメソッドとtoFloatメソッドは、この2つのタイプの変換操作を処理するために使用できます.
タイプ変換
基本データ型のキーワード自体が方法であり、フォーマット変換を完了することができます.
次のコードのように:
var
x: int32 = 1.int32 # same as calling int32(1)
y: int8 = int8('a') # 'a' == 97'i8
z: float = 2.5 # int(2.5) rounds down to 2
sum: int = int(x) + int(y) + int(z) # sum == 100
$オペレータとreprメソッド
nimの内蔵タイプは$オペレータでデータを文字列にフォーマットできます
ただし、いくつかの高度なタイプ、またはユーザーがカスタマイズしたタイプについては
$はどうしようもありません(これらのタイプに$オペレータを再定義しない限り)
デバッグ時に複雑なタイプの値を見たいだけです
この複雑なタイプに$オペレータを定義するたびに、面倒です.
このときreprメソッドを使うことができます
reprメソッドは任意のタイプに適用でき、自己関連タイプでも問題ありません.
次のコードを見てみましょう
var
myBool = true
myCharacter = 'n'
myString = "nim"
myInteger = 42
myFloat = 3.14
echo($myBool, ":", repr(myBool))
# --> true:true
echo($myCharacter, ":", repr(myCharacter))
# --> n:'n'
echo($myString, ":", repr(myString))
# --> nim:0x10fa8c050"nim"
echo($myInteger, ":", repr(myInteger))
# --> 42:42
echo($myFloat, ":", repr(myFloat))
# --> 3.1400000000000001e+00:3.1400000000000001e+00
注意repr(mystring)の時、彼のメモリアドレスも出力されました
キーワードtype
Nimでは、typeキーワードを使用してタイプを定義し、次のコードを見てください.
type
biggestInt = int64 # biggest integer type that is available
biggestFloat = float64 # biggest float type that is available
オブジェクトタイプと列挙タイプもtypeキーワードで定義されます
列挙タイプ
列挙タイプは、秩序化された値シーケンスを定義します.
値シーケンスの各値は整数です.
1番目の値は0、2番目の値は1で、順番に類推します.
列挙タイプの変数は、このシーケンス値の1つにのみ割り当てられます.
セグメントコードを見てみましょう.
type
Direction = enum
north, east, south, west
var x = south # `x` is of type `Direction`; its value is `south`
echo($x) # writes "south" to `stdout`
上のコードで定義した変数xのタイプはDirectionです
注意:最後の行のコード出力の内容は2ではなくsouthです.
ordメソッドを使用すると、列挙変数の値が得られます
比較に関連するすべてのオペレータは、列挙変数に使用できます.
次のコードのように、点オペレータを使用して曖昧さを回避できます.
var x = Direction.south
他の言語との互換性を向上させるために、列挙タイプで定義された記号を特定の値に指定できます.
ただし、特定の値を指定する場合は、必ずサイズ順に指定してください.
もしあなたが1つの記号の値を明確に与えていないならば、この記号の値は彼の前の記号の値に更に1をプラスします
次のコード例を見てみましょう.
type
MyEnum = enum
a = 2, b = 4, c = 89
はい、今日はここまでにします.好きな人はお勧めしてください.