Ruby 入門
流れ Ruby の文法 画面に出力 キーボードから入力 数値 文字列 変数 配列 ハッシュ 制御構造 ( 分岐 繰り返しなど ) if while case for each 関数 クラス
Ruby とは プログラミング言語 インタプリタ言語 オブジェクト指向 国産 ウェブアプリケーションフレームワーク RubyOnRails で注目 弊社での Web アプリケーション開発に利用
画面に出力 puts hello world.
キーボードから入力 gets 例 ) puts gets # 入力をそのまま画面に出力 abc と入力する場合 gets では abc n のように改行コードが最後に入る これを取り除くには gets.chomp とする
四則演算 単純な例 : puts 1 + 1 #=> 2 puts 3 1 #=> 2 puts 1 * 2 #=> 2 puts 10 / 5 #=> 2 puts 10 % 2 #=> 5 複雑な例 : puts 1 + ( 1 2 * ( 4 1 ) ) #=> -4
文字列 puts 文字列 #=> 文字列 puts これも文字列 #=> これも文字列 エスケープシーケンス puts 改行は nこうする #=> 改行はこうする puts これだと n 改行されない #=> これだと n 改行されない puts これに 注目 してほしい #=> これに 注目 してほしい 文字列の結合 puts こんにちは + こんばんは #=> こんにちはこんばんは
数値と文字列の変換 文字列を数値へ 100.to_i 12.5.to_f # 整数 # 浮動小数点数 数値を文字列へ 100.to_s 変換しないといけない例 : a = 1 ; b = 2 ; puts a + b
Ruby の変数 変数を宣言しなくてよい 実際に使用するときにいきなり使える num = 3 変数には型がない 中に入っているオブジェクトが動的に変化 a = 1 a = foo # 数値が入っていたところに文字列を代入
変数の使用例 変数に値を代入 num = 1 str = 文字列 変数の値を出力 puts num #=> 1 puts str #=> 文字列 変数から変数に代入 str = num puts str #=> 1 ( 数値 ) 変数で計算 puts str + num #=> 2 ( 数値 )
変数と四則演算 変数に特定の値を加減乗算する a += 4 a -= = 4 a *= 4 a /= 4 # 0 を指定するとエラーが起こる
宣言 初期化 配列 a = [] ( 空の配列 ) a = [1,2,3] 追加 a << 4 a += [] 参照 a[0] a.first ( 一番はじめの要素 ) a.last ( 一番最後の要素 ) 配列の中身の個数 a.size
ハッシュ key と value のペアを格納する配列 別名 連想配列 janken = { # key => value グー => 0, チョキ => 1, パー => 2 } janken[ パー ] #=> 2 key を添え字にすると ペアになっている value が返る 使用例 : 英日辞書プログラム
比較 制御構造 a < b : a は b より小さい a <= b : a は b 以下 a => b : a は b 以上 a > b : a は b より大きい a == b : a と b は等しい a!= b : a と b は等しくない 条件を満たす場合は true( 真 ) 満たさない場合は false( 偽 )
制御構造 条件分岐 if 文 a = 1 if a == 1 puts 1です elsif a == 2 puts 2です else puts 1でも 2でもありません 条件分岐
制御構造 複数条件分岐 case 文 case num when 1 puts 1です when 2, 4, 6 puts 2,4,6 のどれかです when 4..7 puts 4~7 の範囲です else puts 条件以外です
制御構造 繰り返し while 文 while a < 10 puts a a += 1 繰り返し
繰り返し upto 文 0.upto(10) { i puts i } 繰り返し 制御構造 C 言語の for( int i = 0; i <= 10; i+){ } に相当
繰り返し times 文 100 回繰り返す i は0からスタート 100. times { i puts i } 制御構造
配列の繰り返し each メソッド a = [1,2,3,4,5] a.each { var var puts var } for 文 for ( var in a ) puts var 制御構造
メソッド ( 関数 ) 今までに出てきたメソッド puts, gets gets. gets.chomp 1.to_i, 1.to_f ( 文字列クラスのメソッド ) 1. 1.to_s ( 数値クラスのメソッド )
関数の定義 def plus(a,, b) return a + b メソッドの作り方 利用 puts plus( 10, 12 ) #=> 22
return の省略 メソッドの最後に書いた行の値が戻り値になる def plus( a, b, c ) ans = 0 ans += a ans += b ans += c return ans # return が省略されている
大文字で始まる変数 MAX_VALUE = 10 定数 メソッドの中では定義できない 一度初期化あとに再度代入しようとすると警告がでる ( エラーではないが非推奨 )
クラス オブジェクトの定義 クラス定義 例 : 挨拶クラス class Greeting1 # インスタンスメソッド def greet return こんにちは # クラス名は必ず大文字ではじめる # メソッド名は小文字で 単語ごとに _ で区切る
インスタンスの生成 var = Greeting1.new クラス var に生成された Greeting クラスのインスタンスが入っている インスタンスメソッドの呼び出し puts var.greet #=> こんにちは
クラス 挨拶する相手の名前を入力できるようにする class Greeting2 attr_accessor name # アクセッサ def greet return こんにちは + @name@ + さん # 特殊なメソッド def initialize(name) @name = name # 挨拶をする相手の名前
initialize メソッド クラス インスタンスを生成するときに インスタンスの初期化処理を行う場合に定義 インスタンス変数 @hoge のように @ から始まる変数 インスタンスごとに保持している値が異なる インスタンス変数はインスタンスの外から使えない アクセッサ インスタンス変数をインスタンスの外から使えるようにするための定義 attr_accessor name で定義する greeting_instance.name で値を取得したり 代入したりできるようになる
クラスメソッド インスタンスを生成せずに実行できるメソッド class Greeting2 # 省略 def self.ask_name return あなたのお名前は何ですか?? クラス名. メソッド名で実行 puts Greeting2.ask_name
クラスの定数 クラスの中で定数を定義すると クラスの中でのみ有効な定数になる class Foo HOGE = hoge クラス外から参照する場合は Foo::HOGE と記述すると参照できる
クラスの継承 親クラスのメソッドやインスタンス変数を受け継いだクラスを定義 class MyGreeting < Greeting1 # なにもメソッドは定義していない 利用 a = MyGreeting.new a.greet #=> 親クラスのメソッドが呼ばれる
メソッドのオーバーライド 親クラスで定義されているメソッドを再定義する class EnglishGreeting < Greeting2 def greet return Hello + @name +. def self.ask_name return What is your name??
挨拶クラスを使った例 puts Can you speak Japanese? (yes/no) if gets.chomp == yes puts Greeting2.ask_name g = Greeting2.new gets.chomp else puts EnglishGreeting.ask_name # 日本語の挨拶 g = EnglishGreeting.new gets.chomp # 英語の挨拶 puts g.greet # 選んだほうの言葉で挨拶する
Ruby の組み込みクラス 数値クラス 整数型クラス (Integer {Fixnum{ Fixnum, Bignum}) 浮動小数点型クラス (Float) 文字列クラス (String) シンボルクラス (Symbol)( 配列クラス (Array) ハッシュクラス (Hash) nil クラス (NilClass) Boolean true クラス (TrueClass( TrueClass) false クラス (FalseClass)
Boolean 真 or 偽の値をとる 真 : 偽 : true false 比較演算をすると生成される 100 > 10 #=> true 10 > 100 #=> false
シンボル :Symbol: 文字列クラスはインスタンスごとにオブジェクトが違う a = foo b = foo は別のインスタンスになる シンボルでは a = :foo: b = :foo: は同じインスタンスになる
nil(nilclass) とは? 空を意味するオブジェクト 次のような場合によく出現する 戻り値を返さない関数の戻り値 配列やハッシュで値がない要素を参照 例 array = [] array[2] #=> nil # 値がないので nil が返る
ブロック do ~ までのプログラムをオブジェクトにしたもの ( このオブジェクトを手続きオブジェクトという ) 他の言語にはあまりない特殊な機能 作成 hello = Proc.new do puts hello # 別の書き方 : hello2 = proc { puts hello } 利用 hello.call #=> hello と表示される
ブロック ブロックに引数を渡すこともできる greet = proc { message puts message } greet.call こんばんは #=> こんばんは と表示 greet.call さようなら #=> さようなら と表示
ブロック 配列の each メソッドや 数値クラスの upto メソッドの { i } は do i ~ の別の書き方 ( 若干違いはある ) 0.upto(10) { i } 0.upto(10) do i は同じ動作