0
0

More than 5 years have passed since last update.

Ruby社内勉強会 第1回

Last updated at Posted at 2019-03-19

概要

単なる社内勉強会の記録ですが、Ruby初学者の参考になるかもしれないので内容を公開します。
今回は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と同等
  • -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

次回

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0