概要
python と ruby はメソッドなどは大体同じなんですがちょいちょい違うところがあるので個人的な備忘録として作成しました。随時加筆します。
ruby メモ
文法・作法
-
:
はいらない- python だと定義文やコンテキストブロックを作るときに必要だが ruby は不要
-
if
elsif
else
end
- python だと
if
ブロックを閉じるときはインデントを抜けるだけだが ruby は終了範囲を明示的にend
で指定する必要あり
- python だと
-
return
は書かない- 書いてもエラーは起きないが慣習的に書かない
- 関数 / メソッドの最後に評価された値が勝手に戻り値になるので明示的に書かなくてよい
-
unless
- python で書くなら
if not
- python で書くなら
-
case
when
-
case state
when value
で条件分岐を書ける。複数条件あるときに便利 - python だと
match
case
に相当。3.10 以降で実装
-
- 関数 / メソッド定義時・呼出時に引数がないときは
()
を省略可能- 定義時・呼出時いずれも
()
を書いてもエラーは起きない - python で同じことやるとメソッドだよ〜と言われるだけでメソッドが呼び出されずに終わるところが呼出しになる
- 定義時・呼出時いずれも
- メソッド呼出後に
!
をつけると inplace 処理- pytorch でいうメソッド末尾の
_
みたいなもの - 全てのメソッドに実装されてるのかは不明
- pytorch でいうメソッド末尾の
-
?
付きのメソッドはbool
を返す- クエスチョンマークの初見の違和感がすごい
基本オブジェクト
配列
python にも同じ機能はあるが表現が違う
-
include?(x)
-
x
が配列に含まれるか否かのbool
を返す - python で書くなら
x in list
-
-
empty?
- 配列が要素を持っているかの
bool
が返る。len(list) > 0
と等価
- 配列が要素を持っているかの
-
shuffle
- 配列をランダムシャッフルする。
random.sample(list, len(list))
と等価 - python の
random.shuffle
は inplace 処理なので微妙に違う
- 配列をランダムシャッフルする。
-
(start..end).to_a
- start から end までの配列を作成する
- python だと
list(range(start, end+1))
とか[i for i in range(start, end+1)]
。end が1ずれるので注意
-
list << x
orpush(x)
- 配列末尾に
x
を追加する。python だとlist.append(x)
- 配列末尾に
-
shift
- 配列の最初の値を削除して戻り値として返す。python だと
list.pop(0)
- 全ての配列要素の index が shift するからこの命名かと思われる
- 配列の最初の値を削除して戻り値として返す。python だと
-
uniq
- 配列のユニークな要素を返す。たぶん配列の順番を破壊しない
- python で配列の順序を破壊して良い場合は
list(set(list))
で実現できる。順序を破壊しない場合は unique のフラグを管理しつつループで先頭からチェックしていくとかになる気がします
-
join
- 要素が文字列の配列を結合する
- python の場合
string.join(list)
になるか
-
size
- 配列の要素数を返す。python だと
len(list)
- 配列の要素数を返す。python だと
python に同名メソッドがあるが挙動が違う
-
reverse
- ruby は inplace ではない
- python は inplace 。互換なのは
reversed(list)
メモ
- ruby 教材としては以下の講座を使わせていただきました
- https://www.udemy.com/course/the-ultimate-ruby-on-rails-bootcamp/
- 動画内では AWS を使っていますが面倒だったので docker で ruby のイメージを引っ張ってきて環境を作りました
- inplace 処理が
!
で表現できるのは統一的で良いなと思った