Progate Ruby
Rubyの開発環境を用意しよう!
windowsOS
- インストール
- https://rubyinstaller.org/downloads/
-
=> Ruby+Devkit 2.6.5-1 (x64)
- I accept the License を選択した後は全てNext
- (コマンドプロンプトが出現したら)
1,2,3
と入力して Enter
- 動作確認
ruby -v echo puts 1 + 2 > fuga.rb ruby fuga.rb
macOS
# macOS には標準でインストールされている ruby -v # homebrew はインストール済みの前提 rbenv -v # command not found なはず brew install rbenv ruby-build rbenv -v echo $SHELL ## /bin/bash の場合 echo 'eval "$(rbenv init -)"' >> ~/.bash_profile source ~/.bash_profile ## /bin/zsh の場合 echo 'eval "$(rbenv init -)"' >> ~/.zshrc source ~/.zshrc rbenv install --list rbenv install 2.7.1 rbenv versions rbenv global 2.7.1 ruby -v
Ruby I
- Python との共通点
- Python との相違点
- 13/4 -> 3
- コーディング規約の例: https://shugo.net/ruby-codeconv/codeconv.html
- 文字列中での変数展開:
#{変数名}
を文字列に入れる (ダブルクォーテーションの場合のみ) - if文の記述(動きはPythonと同じ)
- true, false (Python は True, False)
- puts のようなメソッドの括弧は省略可能(省略しなくてもよい)
if a > 1 # 後ろに : はつけない puts "a>1" # インデントは 2つのスペース を推奨(インデント自体必須ではない) elsif a < 0 # elif でも, elseif でもない puts "a<1" else puts "a==1" end # end で閉じる
- 論理演算に関して
and
,&&
,or
,||
がある- 違いは優先度のみ (
&&
>=
>and
) - 評価値はオペランドの一方(JavaScriptと同じ)
A && B
で A が偽なら A そのもの, A が真なら B そのものを返す。
Ruby II
- Python との共通点
- 配列:
numbers = ["A","B","C"]
と[]
によるアクセス
- 配列:
Python との相違点
- ハッシュ:
info = {"name" => "hoge", "age" => 23}
- アクセス, 要素の追加, 更新などは同じ
- 存在しない要素へのアクセスは
nil
となるnil
はputs
で表示されない。nil
の評価はfalse
- 存在しない要素へのアクセスは
- キーをシンボルとすることもできる。(
:name
)- シンボルは文字列に似ているが, 互換性はない
- キーにシンボルを用いるとき,
:name => "hoge"
はname: "hoge"
と書ける- このときも
info[:name]
- このときも
- アクセス, 要素の追加, 更新などは同じ
- ハッシュ:
表示メソッド
puts
: 引数が配列のとき各要素を出力(要素ごとに改行される)。引数が文字列のとき文字列はクォートで囲まれない。print
: 引数が配列のとき配列として出力。引数が文字列のとき文字列はクォートで囲まれない。p
: 引数が配列のとき配列として出力。引数が文字列のとき文字列はクォートで囲まれる。
items.each do |item| # 配列 items の各要素を item に格納しながらループ puts item end
Ruby III
def method1 # ruby のメソッドはいわゆる関数 puts "hoge" end # endつける method1 # 引数無しのメソッド呼び出しの() はなくても分かるので普通省略する def method2(arg1) puts "#{arg1}です" return arg1 end
- 真偽値を返すメソッド名は慣用的に
isEmpty
ではなくempty?
とする - キーワード引数(呼び出し順序は不問になる)
def method3(a,b: 3) # b のデフォルト値は 3(デフォルト値は省略可能。b: とする。(:b ではない)) return a + b # ここでは :b ではなく b end method3(2, b: 4) # 呼び出しはシンボルとして method3(2, :b => 4) # なので, これも可
Ruby IV
class Hoge attr_accessor :name # name はインスタンス変数 def initialize(name) # コンストラクタ(キーワード引数を用いてもよい) self.name = name # this ではない end def getName # インスタンスメソッド return self.name end end hoge = Hoge.new("fuga") # インスタンス生成 puts hoge.name puts hoge.getName
require "ファイルパス"
ファイルパスは拡張子省略gets.chomp
入力を文字列として受け付ける
a = gets.chomp.to_i # to_i は整数に変換するメソッド
Ruby V
- 継承
class 子クラス < 親クラス
- オーバーライドの動作は同じ
- オーバーライドしたメソッドの中で super メソッドを呼び出すと親クラスの同名のメソッドとされる。(super には必要なら実引数を渡す)
- ライブラリの利用
require "date" date = Date.new(2020,5,29) puts date # 2020-05-29 if date.sunday? # デフォルトで用意されているメソッド today = Date.today # today はクラスメソッド