筆者は現在Rubyプログラマとして働いていますが、
メソッドの呼び出しの丸かっこが省略できる
Rubyではメソッドを呼び出すときの丸かっこを省略できます。以下はsizeメソッドを丸かっこ付きで呼び出す場合と丸かっこなしで呼び出す場合です
"abc".size() #=> 3
"abc".size #=> 3
nilとfalseだけが偽、それ以外は真
Rubyの真偽値はnilnull)falseだけが偽で、
数値やnilもすべてオブジェクト
Rubyはオブジェクト指向言語なので数値やnilもすべてオブジェクトです。プログラミング言語によってはオブジェクト指向言語であってもプリミティブ型かそうでないかを意識しなければならないものがありますが、
# 数値やnilもオブジェクトなのでメソッドが呼び出せる
1.to_s #=> "1"
nil.to_s #=> ""
ちなみに、
# to_sメソッドでStringクラスの文字列表現を得る
String.to_s #=> "String"
if文が値を返す
Rubyのif文は実は式になっています。そのためif文の結果を直接変数に代入できます。
n = 1
answer =
if n > 0
"正です"
else
"0または負です"
end
answer #=> "正です"
メソッドの戻り値にreturnを付けなくても良い
Rubyのメソッド定義ではreturnを付けなくても最後に評価された式がそのメソッドの戻り値になります。
def add(a, b)
# return a + bと書いてもいいが、returnなしが主流
a + b
end
add(1, 2) #=> 3
エイリアスメソッドが定義されていることがある
Rubyではまったく同じ機能なのに名前だけが異なるエイリアスメソッドが定義されていることがあります。たとえば以下のsizeはlengthのエイリアスメソッドです。
"abc".length #=> 3
"abc".size #=> 3
配列の添え字に負の値が使える
Rubyでは配列の添え字に負の値を使うと、
arr = [1, 2, 3]
arr[-1] #=> 3
ループ処理にはeachメソッドとブロックを使う
配列をループ処理するような場合はeachメソッドとブロックを使います。ブロックは下のコードでいうと{から}まで囲まれた部分になります。
numbers = [1, 2, 3, 4]
sum = 0
numbers.each { |n| sum += n }
sum #=> 10
ブロックは他の言語で言うところのコールバック関数のような働きをします。たとえば、
const numbers = [1, 2, 3, 4]
let sum = 0
numbers.forEach(n => sum += n)
console.log(sum) //=> 10
スクリプト言語なのに静的型検査ができる
Rubyはスクリプト言語なので静的な型検査はできない、
たとえば次のようなRubyスクリプトsample.)
class Sample
def add(a, b)
a + b
end
end
sample = Sample.new
puts sample.add(1, 2) #=> 3
Sampleクラスのaddメソッドの型情報を定義する場合は、sample.)
class Sample
def add: (Integer a, Integer b) -> Integer
end
一見、Integer a, Integer b))、-> Integer)、
このように型定義情報を書いておくと、addメソッドの2つめの引数をわざと文字列にしてみましょう。
puts sample.add(1, "2")
こうするとsteep checkコマンドを実行したときに型エラーが検出されます。
$ steep check
# Type checking files:
..................................F...........................
lib/sample.rb:7:19: [error] Cannot pass a value of type `::String` as an argument of type `::Integer`
│ ::String >: ::Integer
│ ::Object >: ::Integer
│ ::BasicObject >: ::Integer
│
│ Diagnostic ID: Ruby::ArgumentTypeMismatch
│
└ puts sample.add(1, "2")
~~~
Detected 1 problem from 1 file
型検査が行えるのはコマンドライン上だけではありません。VS CodeやRubyMineのようなエディタ・
まとめ
今回の記事では他の言語経験者がRubyを使い始めたときに
記事の都合上、