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です
次のコードのように、接尾辞を使用して整数型のタイプを設定できます.
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

 
はい、今日はここまでにします.好きな人はお勧めしてください.