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_accessor と attr_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
php は public, 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を指し, クラスメソッドが定義できる。
インスタンスメソッド内 なら メソッド を呼び出している インスタンス を指す。
PHP の 基
取得系
長さ(文字列)
strlen, mb_strlen
//php strlen("php") // 3 //ruby "php".length // 3
strlen : バイト数での取得。全角1文字は2バイト
mb_strlen : 半角全角も1文字は1文字。
文字列の長さを取得(strlen, mb_strlen) - 文字列関数 - PHP関数
要素の数
count
<?php //php $data = array("東京"); echo count($data); // 1 // ruby data = ["東京"] p data.size // 1
ランダム
rand (rubyも)
<?php echo rand(1,4); //1~4
変換系
分解 (一文字ずつ、配列に格納する)
mb_substr , preg_split
速さ : mb_substr < preg_split
[PHP] 文字列を一文字ずつ配列に格納する - Qiita
関数自作
<?php //php function printRectangleArea($height,$width){ echo $height * $width; } printRectangleArea(5,10); // ruby def rectangle(height,width) height * width end puts rectangle(5,10)