ことゆうのOUTPUT

アウトプット成果物の置き場

Rubyの学習(入門書) 6,7日目 学習メモ(続き)

本日はプログラミング学習から離れておりました。
今回は、後回しにしていた一昨日昨日の学習についてのメモを書きます。

最近、自分の中で「毎日課題(プログラミング)を継続しなければ。。」みたいな雰囲気になってきています。。
迷走し始めそうな自分自身にあらためて念押ししておきます。

ちがうんだ!
継続したいのは"アウトプット行為"なんだ!

今のところ、プログラミングネタばっかりですが、今後のブログの方向性について、そろそろちょっと考えないと。。

一昨日の進捗:サンプルコード打ち込み(3時間)
昨日の進捗:サンプルコード打ち込み(1時間)

関連して、いろいろ試行錯誤

メモは以下。


[ ループ処理の初期値をカプセル化できるか? ]

 ちょっとぐぐりましたが、メジャーな手法が何なのかわかりませんでした。
いろいろ試してみて意図したことはできました。injectを使ったり、ラムダを使ったり、クラスを使ったり。
ですが、これって実際そこまでやるか?って話に感じます。
今やるべきなのはこれじゃねーよなぁ。。って気分maxになりました。
やっといて何ですが。

p ->a{ while a<=5 do a+=1 end ; a}.call 0
#=>6
p a
#NameError (undefined local variable or method `a' for main:Object)



[ and と && ]

メソッドの引数適用の優先度については、
強い順に && , 引数適用 , and
のような振る舞いをする、というのは先日勉強しました。
しかし、公式ページをみても引数適用の優先度についての記述を見つけることができませんでした。
結局ググったのですが、とりあえずは以下の説明がそれっぽいのかなあと思います。

qa.atmarkit.co.jp

>メソッドの引数としてのスペースや括弧が && と and の中間の優先度だということだと思うのですが


スペースや括弧というよりはカンマの方が and/orよりも優先度が高いからかもしれません(引数が1つの場合はわかりにくいですが、perlが同様に notとandとorを持っていてこれがカンマより低いです。なお、perlとはいろいろ異なるのでエラーが出る出ないとか存在意義などはいろいろ異なると思います)。

オライリー本か何かを読めば分かるんですかねえ。。



[ 引数を囲むかっこについて ]

思いがけず以下のようなエラーが出ました。

irb(main):004:0> p(true and false)
Traceback (most recent call last):
3: from /home/vagrant/.rbenv/versions/2.6.3/bin/irb:23:in `

'
2: from /home/vagrant/.rbenv/versions/2.6.3/bin/irb:23:in `load'
1: from /home/vagrant/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/irb-1.0.0/exe/irb:11:in `'
SyntaxError ((irb):4: syntax error, unexpected and, expecting ')')
p(true and false)
^~~

この原因は、上述のandと&&について調べているついでにわかりました。
以下、前述の記事からの引用です。

sample(true and false)
はエラーです。括弧はメソッドの引数を括っているとみなされています。

今まではandを使ってなかったので、引数カッコの優先度なんて考えなくてもエラーに遭遇していなかったのですな。

じゃあ、andやorの他にはないの?ということで試してみました。
docs.ruby-lang.org

演算子の優先順位
高い ::
[]
+(単項) ! ~
**
-(単項)
* / %
+ -
<< >>
&
| ^
> >= < <=
<=> == === != =~ !~
&&
||

.. ...
?:(条件演算子)
=(+=, -= ... )
not

低い and or


p ( not true ) #=> false
p( not true ) #エラー

p (a = 1) #=>1
p(a = 1) #=>1

#(一応、 ?: と .. も確認しましたが大丈夫でした。)

引数適用より優先度が低い演算子はand,orの他には、notがそうみたいです。