[ルビー学習ノート]5.きほんしき


1.基本的な表現は何も言うことはありません~~~~唯一注意しなければならないのはRubyが自加(++)と自減(-)をサポートしていないことで、+=と-=を使って代用することができます.
1 + 2
a = 3
a += 4

2.コマンド展開
Rubyでは、システムコマンドを逆引用符(`)で直接実行できます.実はKernelを実行しただけです.()方法ですが、これを表現として使うと、ちょっと変な感じがします.
puts `ver`

出力:
Microsoft Windows XP[バージョン5.1.2600]
もちろん、この方法を再ロードすることができます.
def `(cmd)
  "Command:#{cmd}
" + Kernel.`(cmd) end puts `ver`

3.賦課
きほんわりあてぶん
a = b = c = 1       # a = 1, b = 1, c = 1
a = (b = 1 + 2) + 3        # a = 6, b = 3

パラレル付与文(次のコードを見ると、少しめまいがする~~~~)
a = 1
b = 2
a, b = b, a
puts a, b

出力:
2
1
実は簡単で、次のルールを見てみましょう.
(1)代入操作の前に,まず右側の値を順番に計算し,配列に保存する.
x = 0
a, b, c = x, (x += 1), (x += 2)
puts a, b, c

出力:
0
1
3
(2)代入文が左より多い場合、式は右の値からなる配列を返します.
(3)付与文の左値が右値より多い場合、左値より多い場合は無視される.
a, b, c = 0, 1
puts a, b, c

出力:
0
1
nil
(4)右の値が左より多い場合、追加の右の値は無視されます.
(5)1つの左値のみで複数の右値がある場合、左値は直接配列に割り当てられる.
a = 0, 1
puts a.class
puts a

出力:
Array
0
1
(6)最後の左の値に「*」接頭辞がある場合、余分な右の値は配列で変数に割り当てられます.
a, b, *c = 1, 2, 3, 4, 5
puts a
puts b
puts "------------"
puts c

出力:
1
2
------------
3
4
5
いくつかの複雑な点があります.
a = [1, 2, 3, 4, 5]

b, c = 99, a         # b=99, c=[1,2,3,4,5]
b, *c = 99, a        # b=99, c=[[1,2,3,4,5]]
b, c = 99, *a        # b=99, c=1
b, *c = 99, *a      # b=99, c=[1,2,3,4,5]

ネストされた付与文もあります.
a, (b, c), d = 1, 2, 3, 4
puts a, b, c, d

出力:
1
2
nil
3
見えないの?簡単です.カッコ内の変数は、最初の付与操作で変数として処理されます.並列付与規則によると、自然に「2」は1つしかありません.次に、カッコ内の変数に対して第2ラウンドの値を割り当て、自然c=nilとする.
a, (b, c), d = 1, [2, 3], 4
puts a, b, c, d

出力:
1
2
3
4
a, (b, *c), d = 1, [2, 3, 100], 4
puts b, "----", c

出力:
2
----
3
100
4.ブール式
Rubyの「真」の定義は簡単です.nilやfalseではない値はtrueなので、ラインの値が文字列であるにもかかわらず、ループ全体を完了することができます.
while line = gets
    puts line
end

Rubyのブール判定は「短絡解」(最初の操作書が一致または不一致の場合、後続の判定を放棄)を採用し、新しいオペレータ「defined?」を定義した.パラメータが定義されているかどうかを判断します.
puts defined?(a)

a = 1
puts defined?(a)

出力:
nil
local-variable
パラメータが定義されていない場合、defined?nilを返します.そうしないと、タグ文字列が返されます.
私たちが慣れているブール式とは異なり、Rubyオペレータ&&、and、|、orはtrueやfalseではなく、最初の決定条件の真偽パラメータ値を返します.
puts "a" && "b" # a   ,            b,   b。
puts nil && "b" # nil       ,    nil。
puts "a" || "b" #        ,   a。