💎

32歳から始めるRuby

2022/12/27に公開

大遅刻です。

この記事はRuby Advent Calendar 2022 16日目の記事です。

概要

  • 2022年9月に転職し、7年のプログラマの人生の中で初めてRubyメインの職についた
  • これまでPHP→Pythonメインだったので、久々に新規言語を学びました
  • その時「?」って、なったことを連ねる

ちなみにこの本を読んで勉強しています。

https://www.amazon.co.jp/プロを目指す人のためのRuby入門-言語仕様からテスト駆動開発・デバッグ技法まで-Software-Design-plusシリーズ/dp/4774193976

エイリアスについて

irb(main):001:0> a = [1,2,3]
=> [1, 2, 3]
irb(main):002:0> a.count
=> 3
irb(main):003:0> a.length
=> 3
irb(main):004:0>

「ふぁ!??なんでや!みんなおんなじ書き方できたほうがわかりやすいし、学習コスト低くてええやろ!!」

って気持ちになりました。

で、本を読んでみると

  • 他の言語の影響
  • 直感的に思い浮かんだメソッドで呼べるようにしたい(人それぞれなので)
  • あとからもっといい名前が思いついたから
  • 短く書きたい・英語として自然に書きたい

なるほど!!!!ってなりました。特に4番目。そのほうが自然だと思いました。

シンボルについて

https://zenn.dev/kanoe/articles/352d78902c83e168db66

  • 文字列より高速に比較ができる
    • 内部的には整数なので高速に比較できる
  • 同じシンボルであればまったく同じオブジェクトである
    • メモリ効率が良い
  • シンボルはイミュータブル
    • 勝手に値を変えられる心配がない

当初読んだときはなんぞ・・・?????ってなっていましたが、こうまとめるととてもわかりやすくなりました。

irb(main):004:0> 'apple'
=> "apple"
irb(main):005:0> :apple
=> :apple
irb(main):006:0> 'apple'.class
=> String
irb(main):007:0> :apple.class
=> Symbol
irb(main):008:0> 'apple'.object_id
=> 2600739600
irb(main):009:0> 'apple'.object_id
=> 2600758440
irb(main):010:0> :apple.object_id
=> 1516188
irb(main):011:0> :apple.object_id
=> 1516188
irb(main):012:0> ^D

$ irb

WARNING: This version of ruby is included in macOS for compatibility with legacy software.
In future versions of macOS the ruby runtime will not be available by
default, and may require you to install an additional package.

irb(main):001:0> :apple.object_id
=> 1516188
irb(main):002:0>

irb落として、再度 object_id 確認すると、同じIDなのはそうなの?

ループのブロック構文について

# do ~ end
a = [1, 2, 3]
a.each do |v|
  puts v
end

# { ~ }
a.each { |v| puts v }

# &proc_object
pobj = proc { |v| p v}
a.each(&pobj)

https://docs.ruby-lang.org/ja/latest/doc/spec=2fcall.html

method(arg1, arg2, ...) do [|' 式 ... |'] 式 ... end
method(arg1, arg2, ...) {' [|' 式 ... |'] 式 ... }'
method(arg1, arg2, ..., `&' proc_object)

まだ慣れない構文です。なんか文章中に突然記号がでてきて読みづらいって気持ちになりますが、僕だけですかね。

いうてPythonも似たような感じだなって思いました。結局慣れか。

$ python3
Python 3.9.6 (default, Sep 26 2022, 11:37:49)
[Clang 14.0.0 (clang-1400.0.29.202)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> a = [1, 2, 3]
>>> [i for i in a]
[1, 2, 3]
>>> [i * 3 for i in a]
[3, 6, 9]
>>> for i in a:
...     print(i)
...
1
2
3

雑感

まだ基礎的なところです。とはいえ、他言語で仕事した経験があるので、依頼されたタスクをレビュー必須で進めることはできるのですが、ちゃんと理解したいなと思う今日このごろの僕です。

そして、いつになったらこの本が読み終わるのかめっちゃ心配なんですが、がんばってRubyな人になります。

以上です。また来年〜〜〜

Discussion