Ruby社内勉強会 第1回
概要
単なる社内勉強会の記録ですが、Ruby初学者の参考になるかもしれないので内容を公開します。
今回は1回目です。
背景
-
JavaプログラマがRubyを使ってみたの記事を社内で共有したところ、Rubyを勉強してみたいという話になったので開催することになった
- メンバー全員、Javaはわかる
進め方
-
Rubyがミニツクをみんなで見ながら、講師(私)が内容の説明を行う
- 全員Javaはわかるので、Javaとあまり変わらない箇所などは適宜スキップする
- WindowsのPCを使用する
- 1回の開催で1時間ほど
- 動画、ドリル、演習はスキップする
注意事項
- Rubyがミニツクをみんなで見ながら、講師(私)が内容の説明を行う
- 全員Javaはわかるので、Javaとあまり変わらない箇所などは適宜スキップする
- WindowsのPCを使用する
- 1回の開催で1時間ほど
- 動画、ドリル、演習はスキップする
注意事項
本記事のサンプルコードは全部を網羅していないため、適宜元サイトも参照してください。
学んだ内容
ミニツクで学んだ範囲
「1. Hello, Ruby!」から「3. 便利なオブジェクト」の「配列」まで
詳細
環境構築
- こちらを参考にインストールを実施
- 今回はRubyInstaller DEVKITなしをインストール
Hello, Ruby!
- putsメソッドで標準出力へ文字列を出す
- カッコは省略してもいい。むしろ、putsメソッドの場合は省略することのほうが多い
puts "Hello, Ruby!" # => Hello, Ruby!
- rubyコマンドでファイルを指定すると実行できる
- rubyコマンドなしでも動作する? -> おそらくインストール時に.rbファイルへの関連付けを行う設定にすれば直接実行できる
- REPLあり(irb)
- irb上でputsを実行すると、「nil」と表示された
- putsの戻り値がnilであるため
- nilはJavaでいうnullと同等
- irb上でputsを実行すると、「nil」と表示された
- -e 指定の実行はワンライナーのため
端末に表示する
- printメソッドは改行を出力しない
- printメソッドで改行するなら「\n」を使う
- その場合、文字列は''ではなく""で囲う
- pメソッドで、人にわかりやすい表示になる
- Stringの場合は""で囲われた値が出るなど
- pメソッドはnilではない戻り値がある
- Stringリテラルを生成する際の違いとして、""は\nのようなバックスラッシュ記法を使える(特殊な文字として認識される)が、''の場合はそのままの文字列として表示される
- 変数は型がなく、何でも代入できる。宣言なしでいきなり代入式を書ける
- 変数.class で、代入されている値が何の型か調べることが可能
四則演算
- 算術演算子は動作的にはJavaと同じ
- Rubyの演算子は、実はメソッドであるという話もあるが、それは追い追い学んでいく
変数
- ""で囲う文字列の中に#{変数名}があると、変数の内容が出力される
ifによる分岐
- 当然Rubyにもifがあり、動作としてはJavaと同様だが書き方が違う
- 条件式にカッコはつけない
- {}ではなくthen endで囲う(thenは省略してもいい)
- 真偽の判定はJavaと全然違う
- falseとnilが偽、それ以外は全部真
- Javaでいうelse、else ifももちろんあるが、else ifは「elsif」と表記する
他の言語ではあまり見かけない表記- コメントにて指摘あり。Perlなど、elsifという記法を用いる言語は他にも存在する
flag = true
if flag == true then
p "true" # => "true"
end
flag = 0
if flag
p "true" # => "true"
end
whileでの繰り返し
- 動作的にはJavaと同様だが書き方が違う
- 条件式にカッコはつけない
- {} ではなくdo endで囲う(doは省略してもいい)
- 真偽の判定はif文と同じ
- 余談だが、Javaとは違ってインクリメント、デクリメントはない(Pythonと同様)
- for文はなくもないが、あまり使われない
- Javaでいうなら拡張for文に相当する
- breakなどはあるが、そのうち学習する
メソッド定義
- メソッド定義の書式はJavaとはかなり違う
- defキーワードを使う
- 引数がなければ()は書かない。引数があるとしても型は書かない
- 戻り値の型は書かない
- 最後に評価された値が戻り値として返る。return文もあるが省略してもいい
- Rubyのメソッドには戻り値は必ずある(なさそうな場合でもnilが返っている)
- putsと同様、メソッド呼び出し時は()を省略可能。特に引数がない場合は大抵省略する
- メソッドの引数にはデフォルト値を設定可能
def greeting
puts 'Hello, Ruby!'
end
greeting # => Hello, Ruby!
greeting # => Hello, Ruby!
def example(args1, args2 = 3)
args1 + args2
end
p example(1) # => 4
日本語の取り扱い
- 常にUTF-8を使えばいいこととしてスキップ
文字コード指定による動作の違い
- 常にUTF-8を使えばいいこととしてスキップ
文字列
- 式展開(#{})は変数に対してだけでなく算術演算などについても使える
正規表現
- //で囲うことで正規表現オブジェクトを生成できる
- 文字列とのマッチングには=~演算子を使う
- マッチしたら位置を示す数値、マッチしなかったらnilが返る
- falseとnilのみが偽というRubyの仕様があるため、=~の結果はそのままif文で使える
配列
- []で囲って、要素ごとにカンマ区切りで配列オブジェクトを生成する
- 配列の個別の要素を参照する書き方はJavaと同じで[]を付けて0から始まる添え字を指定する
- 要素数の取得もJavaと同じでlengthを使う
- Rubyの場合は、[]もlengthも実はメソッドという話はあるが
- 配列の要素を一つずつ列挙してループするにはeachメソッドを使う
- 繰り返したい処理は、ブロックという処理の塊を渡せる仕組みを使う
- Rubyであまりfor文が使われない理由がこれ
["foo", "bar", "baz"].each do |n|
puts n
end
# => foo
# => bar
# => baz
- 数値を1ずつ増やしてループするような、Javaのfor文に相当する書き方をしたければどうするか?そういう配列を用意しなければならないか?
- 下記のような書き方で可能
- (0..5)のような記法でRangeオブジェクトを生成することができ、それに対してeachメソッドを呼ぶ
- 5.timesのような記法で、それに対してブロックを渡す(この場合は0から4になるが)
- 下記のような書き方で可能
(0..5).each do |i|
puts i
end
# => 0
# => 1
# => 2
# => 3
# => 4
# => 5
5.times do |i|
puts i
end
# => 0
# => 1
# => 2
# => 3
# => 4
5.times do
puts 'aaa'
end
# => aaa
# => aaa
# => aaa
# => aaa
# => aaa
次回
Author And Source
この問題について(Ruby社内勉強会 第1回), 我々は、より多くの情報をここで見つけました https://qiita.com/dhirabayashi/items/1ec479a8d01232ca00c4著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .