Nimチュートリアル【六】


国内初のNimに関するチュートリアルです
まずくだらないことを言う
        Rust1.0はすでにリリースされていますが、
国内の一人がこのことについてとても長いブログですと書いていましたが、
この文章は先日ざっと読んでみたが、この友达がRustを追いかける辛さしか覚えていない.他の内容はもうはっきり覚えていない.
どんなプラスの支払いも励ましと尊敬に値すると思います.
この節は他の言語に何のツッコミもしない.
ニム自身にツッコミを入れて、
Nimという言葉は以前Nimrodと呼ばれていましたハンターを意味していました
聖書の中の人物で、かつて王になったことがある.
肝心なのはNimrodという単語の読み方です:['nɪmrɒd]
心配ですね.「ニマの」と読むなんて!ははは
(でも国内のgo言語圏でyin言語を開発している人物がいるそうで、名前の読み方にも高下の区別はないと思います)
反復器
まず、前回のブログで述べたループに関するコードを見てみましょう.
echo("Counting to ten: ")
for i in countup(1, 10):
  echo($i)

countupは反復器で、彼はどのように実現したのでしょうか.
まず間違いの例を見てみましょう
proc countup(a, b: int): int =
  var res = a
  while res <= b:
    return res
    inc(res)

これは間違っています.一つの方法では、returnの後にこの方法を終了します.returnは循環体の内部にありますか.
では、正しい書き方を見てみましょう.
iterator countup(a, b: int): int =
  var res = a
  while res <= b:
    yield res
    inc(res)
  • procで宣言する方法ではなくiteratorで宣言する反復器
  • 反復器内部でyieldキーワード「反復」を使用して、ある変数の値(C#に似ている)
  • を返すことができます.
  • 反復器はforサイクルでのみ
  • に使用できます.
  • 反復器にreturnキーワードを含めることはできません
  • メソッドにもyieldキーワード
  • は含まれません.
  • 反復器には非表示のresult変数
  • はありません.
  • 反復器は再帰
  • をサポートしていません.
  • 反復器は前置声明(この要求は将来のコンパイラで削除される)
  • をサポートしていない.
    反復器についてはまだたくさんの内容がありますが、後の章でお話しします.
    boolタイプ
    boolタイプにはtrueとfalseの2つの値があります.
    while,if,elif,whenなどのプロセス制御文で、条件が満たされているかどうかを判断するために使用されます.
    例えば:not,and,or,xor,<,<=,>=,!=,=,=このようなオペレータは、計算結果がboolタイプの値です.
    例を見てみましょう
    while p != nil and p.name != "xyz":
      # p.name is not evaluated if p == nil
      p = p.next

    文字の種類
    キーワードはcharで、このタイプは1バイトを占めているので、UTF-8の文字を表すことはできません.
    しかし、UTF-8文字の一部を表すために使用することができます.これは主に性能を向上させるためです.
            for the overwhelming majority of use-cases, 
            the resulting programs will still handle UTF-8 
    properly as UTF-8 was specially designed for this(この文はむやみに翻訳する勇気がない)
    1文字を引用符で囲むと、文字タイプの変数に値を設定できます.
    ==,<,>,<=,>=などのオペレータは、文字タイプを操作するために使用できます.
    $オペレータは、文字タイプを文字列タイプにフォーマットできます.
    文字タイプを数値タイプと混同することはできません.文字タイプの「シーケンス数値」を得るにはordメソッドを使用します.
    数値タイプの値を文字タイプにフォーマットするにはchrメソッドを使用します.
    文字列タイプ
    文字列タイプはmutableタイプ(可変タイプ)です.
    したがって、1つの文字列の接合操作にとって、性能は非常に優れている.
    Nimの文字列タイプは0で終わります(C言語と似ています)
    しかし、Nimの文字列タイプには長さの属性も含まれています(文字列の属性を取ると、非常に効率的です).
    この属性では文字列の末尾の0文字は計算されません
    lenメソッドで文字列の長さを得ることができます
    また、もう一つ注意すべき点があります.
    if s[i] == 'a' and s[i+1] == 'b':

    このようなコードは,i+1が文字列の末尾に達したか否かを検出する必要はない.
    つまり、方位文字列の最後のインデックス(0位置のインデックス)は、問題ありません
            
    演算子を割り当てると、文字列がコピーされます.
    &演算子を使用して2つの文字列をリンクできます
    (add演算子を使用して、ある文字列を別の文字列の末尾に追加することもできます)
     
    文字列の比較は文字列内の文字順で比較されます
    すべての比較オペレータは文字列に使用できます
    慣例では、すべての文字列はUTF-8タイプの文字列ですが、これは強制的に実行されるものではありません.
    バイナリファイルからデータを読み出すと、彼は一連のバイトにすぎません.
    s[i]は、i位置のunicharではなく、i位置の文字charを指す
     
    stringタイプの変数のデフォルト値はnilで、stringタイプの操作の多くはnilに使用できません(これにより異常がトリガーされます)
    そうしたくない場合は、「」を使用して文字列変数を初期化したほうがいいです(ただし、スタックに「」文字列変数を作成することになります).
    だから自分で考えなさい.
     
     
    今日はここまでですが、好きな人におすすめをお願いします!