0
Help us understand the problem. What are the problem?

posted at

updated at

RubyとPHPの比較(メソッド、引数、戻り値)

この記事の概要

Rubyで学習を始めてPHPに言語チェンジをする人が一定数いるみたいなので
そういった人達が参考にするための記事です。

これらの記事の続きです。

https://qiita.com/Hashimoto-Noriaki/items/82beae9d3d6dac11e11c
https://qiita.com/Hashimoto-Noriaki/items/449c00327e99574e430a

メソッド

メソッド(関数)とは何の処理をしているかをわかりやすくまとめた、かたまりのことです。
RubyならdefPHPならfunctionで定義します。
それぞれコードを見ていきます。

⚫︎Ruby

def language(lang)
  puts "#{lang}を勉強したい"
  puts "#{lang}が話せます。"
end

#メソッドの呼び出し
 language("英語")
 language("中国語")
 
#英語を勉強したい
#英語が話せます。
#中国語を勉強したい
#中国語が話せます。

def languageのlanguageがメソッド名です。
メソッド名の後の(lang)が引数です。
defからendの間がメソッドです。

⚫︎PHP

function language($lang) {
    echo "{$lang}を勉強したい";
    echo "{$lang}が話せます。";
}

//メソッドの呼び出し
language("英語"); //引数=英語
language("中国語");

//英語を勉強したい
//英語が話せます。 
//中国語を勉強したい
//中国語が話せます。 が出力

function languageのlanguageがメソッド名です。
メソッド名の後の($lang)が引数です。
functionから}までがメソッドです。

メソッドの注意

メソッドは呼び出されるまで処理が実行されないです。
メソッド名は自由に決められます

メソッドの引数の書き方

メソッドの引数の書き方についてそれぞれ見ていきます。

引数がない場合

⚫︎Ruby

def program
    puts  "Rubyは楽しい"
end

#メソッド呼び出し
program

#Rubyは楽しい

この場合はprogram()と書くこともあればない時もあるみたいです。

⚫︎PHP

function program(){
    echo "PHPは楽しい";
}

//メソッド呼び出し
program();

//PHPは楽しい  

引数がない場合はこのように書きます。
Rubyとは違って()を書いたりします。

複数の引数がある場合

⚫︎Ruby

def program
    puts  "Rubyは楽しい"
end

def sayScore(me,score)
    puts "#{me}のテストは#{score}点です。"
end
#メソッド呼び出し
program
sayScore("私",90)

#Rubyは楽しい
#私のテストは90点です。

⚫︎PHP

function program(){
    echo "PHPは楽しい";
}

function sayScore($me,$score){
    echo "{$me}のテストは{$score}点でした。";
}

//メソッド呼び出し
program();
sayScore("私",90);

//PHPは楽しい
//私のテストは90点でした。

引数のデフォルト値

引数に値を代入するのが引数のデフォルト値です。

⚫︎Ruby

def say_score(me="私",score=90)
    puts "#{me}のテストは#{score}点です。"
end

#メソッド呼び出し
say_score  #私のテストは90点です。
say_score(nil,70)  #のテストは70点です。
say_score("あなた",80) #あなたのテストは80点です。

⚫︎PHP

function sayScore($me = "私",$score = 90){
    echo "{$me}のテストは{$score}点でした。";
}

//メソッド呼び出し
sayScore(); //私のテストは90点でした。
sayScore(null,90);  //のテストは90点でした。
sayScore("あなた",80); //あなたのテストは80点でした。

Rubyの色々な引数

Rubyでは引数にも色々な引数があります。

⚫︎キーワード引数
引数に名前がつきます。

def say_score(score: 90)
    puts score
end

say_score(score:80)  #80と出力
say_score  #90と出力

実際は使用する機会があまりないみたいです。

⚫︎オプション引数
1つの引数で複数の値をハッシュ(連想配列)で受け取ります。

def score(**i)
    p i  #{:teamA=>30, :teamB=>20}
end

score(teamA: 30, teamB: 20)
#{:teamA=>30, :teamB=>20}と出力

⚫︎可変長引数
1つの引数で複数の値を配列で受け取ります。

def count(*i)
    p i #[1,2,3]のように配列で受け取る
end

count(1,2,3)

#[1, 2, 3]  と出力

引数の後にをつけると可変長引数*になります。

戻り値

return文というものを使います。これはその場でメソッドが強勢終了させ、
メソッドの呼び出し側へ値を返すことができます。

⚫︎Ruby

def toeic(score)
    if score >= 800
        return "外資系で働ける"
    else
        return  #戻り値=nil
    end
end

#呼び出し元
result = toeic(800)
puts result

外資系で働ける戻り値です。

⚫︎PHP

function toeic($score){
      if ($score >= 800){
          return "外資系で働ける";
      } else {
          return; //returnの戻り値に何も指定しなければNullとなります。
      }
}

$score = toeic(800);
echo $score; //外資系で働ける

外資系で働ける戻り値です。

Rubyで特に記述しなくても、自動的に処理が行われる戻り値

Rubyでは特に記述しなくても、自動的に処理が行われる(暗黙的な)戻り値が存在します。
それについてみていきます。

⚫︎Ruby

def modorichi(i)
    i = i + 1
    return i
end

puts modorichi(1)
#2
def modorichi(i)
    i = i + 1
    return i
    i  #戻り値なし
end

puts modorichi(1)
#2

戻り値がなくてもRubyなら出力できますが、PHPだと出力されないです。
理由はRubyには特に記述しなくても、自動的に処理が行われる(暗黙的な)戻り値があるからです。

def modorichi(i)
    i + 1
end

puts modorichi(1)
#2

さらに省略したものです。
上で紹介している3つのコードは同じ処理のコードです。

戻り値を説明しているコードを元に上記のルールに従って書き換えてみます。
まずは上記のルールを使わない場合です。

⚫︎Ruby

def toeic(score)
    if score >= 800
        return "外資系で働ける"
    else
        return  #戻り値=nil
    end
end

#呼び出し元
result = toeic(800)
puts result

#外資系で働ける

上記のルールに書き換えるとこうなります。

def toeic(score)
    if score >= 800
        "外資系で働ける"
    end
end

#呼び出し元
result = toeic(800)
puts result

#外資系で働ける

だいぶスッキリした書き方になりましたね。
もっとスッキリさせるとこうなります。

def toeic(score)
   "外資系で働ける" if score >= 800
end

#呼び出し元
result = toeic(800)
puts result

#外資系で働ける

このようにRubyを1行で書くことができます

参考資料

この動画をベースに記事を書きました。

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?