新刊ピックアップ
他の言語経験者がRubyを使い始めると驚くこと
筆者は現在Rubyプログラマとして働いていますが,
メソッドの呼び出しの丸かっこが省略できる
Rubyではメソッドを呼び出すときの丸かっこを省略できます。以下はsize
メソッドを丸かっこ付きで呼び出す場合と丸かっこなしで呼び出す場合です
"abc".size() #=> 3
"abc".size #=> 3
nilとfalseだけが偽,それ以外は真
Rubyの真偽値はnil
null
)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を使い始めたときに
記事の都合上,
記事中で紹介した書籍
-
プロを目指す人のためのRuby入門[改訂2版] 言語仕様からテスト駆動開発・デバッグ技法まで
本書は,プログラミング言語Rubyの言語仕様や開発の現場で役立つRubyの知識を説明した本です。豊富なサンプルコードで文法を学び,例題でプログラミングの流れを体験で...