長年PHPとjavascriptの案件をこなしてた筆者が
ギークな若者たちとRoR環境で開発をするにあたり、
どうせ調べものするなら共有しようという意図と、
Qiitaの使い方の練習で作っている記事です。
(たまにPerlの知識も混ぜます。)
基本
php
文末は;セミコロン
ruby
そんなもんいらない
コメント
php
単一行 //
複数行 /* コメント コメントコメント */
ruby
単一行 # (古いphpでも使えるし、apacheのconfとかシェルスクリプト、Perlでもおなじみ)
複数業
コメント
コメントコメント
=end```
rubyでは複数行コメントでも行の途中までをコメントにする事ができないので気をつける。
変数
===
### php
$var_name
### ruby
var_name
$など要らん
### 文字列連結
#### php
"文字列" . "文字列"
#### ruby
"文字列" + "文字列"
※ただし、暗黙の型変換が効かず、文字列に数値を+するとエラーになる。
変数のスコープなど
---
制御構造
===
### if文
#### php
if(条件){
処理
}else if(条件){
処理
}else{
処理
}
#### ruby
if 条件 then
処理
elsif 条件 then
処理
else
処理
end
### for文(foreach)
#### php
for ($i=0;$i<10;$i++){
処理
}
foreach ($array as $val){
処理
}
#### ruby
for i in 0..9
処理
end
for 変数 in オブジェクト
処理
end
rubyのdo はendで終わるので
シェルスクリプト書き慣れてるとdoneとかやりがち・・
ループ中の一段先送りは
phpはcontinue;でrubyはnextだが continue(2);に相当する物はみあたらない、
ループ中断のbreak;は共通
関数とかサブルーチンとか
===
rubyではphpのように関数やメソッドの戻り値を指定する際のreturnを省略できるため、
明示的に終わりが指定されておらず、他人のコードが若干追いにくい・・
#### php
//引数なし
function 関数名 () {
処理
}
//引数あり
function 関数名 (引数) {
処理
}
//戻り値
function 関数名 (引数) {
return 引数 + 1;
}
### ruby
#引数なし
def 関数名
処理
end
#引数あり
def 関数名(引数)
処理
end
戻り値
def 関数名(引数)
引数 + 1
end
記号の意味
===
rubyはやたらと記号が多くて困る
配列の操作
===
配列の宣言
---
### php
```$array = array($var1,1,"aaa");
ruby
strs = ["aaa","b","hello ruby array"]```
newメソッドを使う場合
```arr = Array.new```
```fives = Array.new(5)``` 要素数5で初期化
```fives = Array.new(5,0)```5つの要素を0で初期化
なじみにくい表現 %w %i (他人のコードで出くわして調べました)
```%w(ruby perl python)
```文字列を空白で区切って配列化する(トーカナイズ)
これは ```$array = explode(" ","ruby perl pythone");```と実行した場合に近い
rubyだと```arr = "ruby perl python".split()```というやりかたも可能でこちらの方がphpプログラマなじみ安いでしょう。
他人に読みやすいコードを書く場合は省略記号をなるべく使わないことをおすすめします。
perlのqw/red blue black/ のような書き方を取り入れたせいかもしれない?
さらにPHPプログラマがファ?ってなる書式
```%i(ruby perl python)
# => [:ruby :perl :python]
```シンボルの配列を作成する
rubyもphpのように配列の要素に数値と文字列を混ぜたり、オブジェクトを格納したりできます。
要素の取得
---
rubyもphpと同様に
```var = arr[0]```
のように要素を取得できます。
また、rubyではphpのarray_sliceを簡略した書き方で配列の一部を新たな配列として取得できます。
### ruby
```arr2 = arr1[0..2]```
```arr2 = arr1.slice(0..2)```
```arr2 = arr1.slice(0,3)```
### php
```$arr2 = array_slice($arr1,0,3);```
配列操作
---
unshiftやpop,concat,pushなどは存在
phpのunsetはrubyではdelete
配列を結合する際に、 +、+=も使える。
正規表現
===
rubyの正規表現の書式はむしろperlに似ている。