Ruby の 基

メソッド

  • gets ( 入力情報 取得 ) # puts <-> gets .
  • to_s ( 数 -> 文字 ) # String
  • to_i ( 文字 -> 数 ) #integer
  • length ( 長さ )
  • empty? ( 空かどうか ) # p.[].empty? # => true
  • rand (ランダム)
  • floor (切り捨て)
  • round ( 四捨五入 )
  • reverse ( 反対 )

  • size ( 整数の実装上のサイズをバイト数で返す )

x = [ "a", "b" ]  
p x.size  # => 2
  • push ( 配列の末尾に追加 )
array = [1, 2, 3]
array.push 4  #=> [1, 2, 3, 4]
  • each ( 配列orハッシュに、先頭データから順に繰り返し処理を行う )
data.each do |value|  #格納する変数, ループ内で使う
  puts value
end

# php なら
foreach( datas as data ){
  echo data;
}

#ruby .. key & value
words.each do |key,value|
  puts "#{value}は英語で#{key}です"
end

変数

name = "mori"
puts name

変数宣言しなくても良い
php なら $ ,
js なら var

if 論理演算

同じ意味

if !( x == 30) # 〜でない
if x != 30
unless x ==  30  # もし〜でなければ

条件分岐 case

num = rand(3)

case num
when 0
  puts "大吉です"
when 1
  puts "中吉です"
when 2
  puts "小吉です"
else
  puts "エラー"
end

# php なら
    $num = rand(0,3);
    
    switch($num){
      case 0:
        echo "大吉です。";
        break;
      case 1:
        echo "中吉です。";
        break;
      case 2:
        echo "小吉です。";
        break;
      default:
        echo "大凶です。";
        break;
    }

配列

names = ["jone", "bob"]  # ruby
$names = array("jone", "bob");  # php

#追加
names.push "mary"  #ruby
$names[] = "mary";  #php

#上書き
names[1] = "mori"  #ruby
$names[1] = "mori"; #php

連想配列

# ruby
x = { "apple"=>"りんご" }
# php
$x = array{ "apple"=>"りんご" };

each

# ruby
data.each do |value|  #格納する変数, ループ内で使う
  puts value
end

# php なら
foreach( $datas as $data ){
  echo $data;
}

# ruby .. key & value
words.each do |key,value|
  puts "#{value}は英語で#{key}です"
end
# php
foreach( $words as $key => $value){
  echo "{$value}は英語で{$key}です";
}

シンボル

# 同じ 文字列
puts "ruby"
puts :ruby
# 同じ
{ "key" => "value" }
{ :key => :value }
{ key: :value }

for

for i in 1..100 do
  puts "#{i}回目のループ"
end

#phpなら
for($i=1; $i<=100; $i++){
  echo "{$i}回目のループ";
}

while

n = 0

while true do
  n += 1
  puts "好きな文字列を入力してください。(stopで終了)"
  answer = gets.chomp
  puts "いま#{n}回繰り返しました"
    
  if answer == "stop"
    break  # ruby で next は php で continue
  end
  
end

1 足し、puts が表示され、gets で入力待ち、入力後 puts が表示される
もし gets(answer) に “stop” が入力されると、 while 自体を抜ける。* if のみのスコープを抜ける訳ではない。

ゲッター & セッター を 同時に定義 する

Class外 から 間違って使用 されては “困りんす” という場合などに, 同時化せず
ゲッター attr_reader を 用い セッター は メソッド定義 するなど様々
* アクセス修飾子 との 使い分け が 具体的に言葉で説明てできません。。

attr_accessor :name, :color

ex
attr_accessorattr_reader の 併用

class Car
  attr_accessor :name, :color
  attr_reader :x
  
  def initialize(name, color)
    @name = name
    @color = color
    @x = 0
  end

  def info
    puts "名前: #{@name}, 色: #{@color}"
  end
  
  def run(distance)
    @x += distance
  end
  
end

my_car = Car.new("ブリウス", "")
my_car.info

puts "--------------------------------------------"
puts "何km走りますか?"
distance = gets.chomp.to_i
my_car.run(distance)
puts "走行距離: #{my_car.x}km"

ゲッター

 attr_reader :name, :color

ex

# ruby
# 1. メソッド で 定義 する def
# 2. attr_reader を使い 完結 に 定義する

# 2 attr_reader + シンボル
class Car  
  attr_reader :name, :color
    def initialize(name, color)
      @name = name
      @color = color
    end
    def info
      puts "名前: #{@name}, 色: #{@color}"
    end
end

my_car = Car.new("ブリウス", "")
puts my_car.name
puts my_car.color

# 1  attr_reader がしていること
def name
  @name
end

セッター

attr_writer :name, :color 

ex

class Car
  attr_reader :name, :color
  attr_writer :name, :color  # セッター
  
  def initialize(name, color)
    @name = name
    @color = color
  end

  def info
    puts "名前: #{@name}, 色: #{@color}"
  end

end

my_car = Car.new("ブリウス", "")
my_car.info

puts "--------------------------------------------"
puts "車の名前を変更してください"
my_car.name = gets.chomp  # セット
puts "車の色を変更してください"
my_car.color = gets.chomp  # セット

puts "名前: #{my_car.name}, 色: #{my_car.color}に変更しました"

メソッドの アクセス制限

  • public
  • private

phppublic, private, protected | アクセス修飾子

インスタンス変数 “@hoge

@で始まる変数は インスタンス変数 基本 インスタンス変数 は クラス内からしか使えない
使用するには ゲッター (呼び出す方法)セッター (セットする方法)を定義する

クラス変数 @@hoge

「@@」で定義

class Car
  @@count = 0
  def initialize(name, color)
    @@count += 1
  end

  def Car.puts_count
    puts "#{@@count}台生産"
  end
end

car1 = Car.new("プリウス", "")
Car.puts_count  # 1台生産
car2 = Car.new("ポルシェ", "")
Car.puts_count  # 2台生産

クラスメソッド

インスタンス.メソッド」に対し、「クラス名.メソッド」を「クラスメソッド」
インスタンス変数 と 関係ないメソッド を作りたいときなど

class Car
  def Car.data
    puts "foo"
  end
end

Car.data  # foo 

クラスメソッド と インスタンスメソッド の違い

クラスメソッド は クラス個数、レコード検索 など
インスタンスメソッド は それぞれのインスタンスの参照、処理、何んらかのアクション など に用いる

self

「self」は 特別な式 で、呼び出される 場所 によって意味が変わる
class定義の直下 なら classを指し, クラスメソッドが定義できる。
インスタンスメソッド内 なら メソッド を呼び出している インスタンス を指す。