【PHP初心者向け】関数は「下請け業者」だ!引数と戻り値で仕事を丸投げする技術

function プログラミング

プログラミングをしていると、同じような処理を何度も書く場面に出くわします。

「消費税を計算して表示」
「消費税を計算して表示」
「消費税を計算して表示」

・・・

そのたびにコードをコピペしていませんか。

それは、あなたが経営するコンビニでおにぎりを売るたびに、レジ打ちの店員を新しく雇っているようなものです。非効率極まりないです。

もし消費税が10%から15%に変わったらどうしますか。

あなたはコピペした全ての箇所を探し出し、血眼になって修正することになります。一箇所でも漏らせば、計算が合わなくなりシステムは破綻します。

全置換を過信してはいけません。

そんな地獄を回避するための仕組みが「関数(function)」です。

これは、特定の処理をパッケージにして、いつでも呼び出せるようにした「下請け業者」のような存在です。


関数:面倒な仕事を丸投げする「専門業者」

関数とは、一連の処理に名前をつけてまとめたものです。

PHPには最初から用意されている「ビルトイン関数(date() や count() など)」がありますが、今回解説するのは、あなたが自分で作る「ユーザー定義関数」です。

イメージしてください。

あなたはメインの進行管理者です。細かい計算や面倒な文字加工を、自分でする必要はありません。

「すまん、これ計算しといてちょうだい」

と命令すれば、裏で勝手にやってくれる部下を作る。それが関数の作成です。


定義:マニュアルを作って看板を掲げる

業者(関数)を雇うには、まず「何をどうするのか」というマニュアル(定義)が必要です。
PHPではfunctionというキーワードを使います。

function aisatsu() {
    echo "こんにちは!いい天気ですね。";
}Code language: PHP (php)

これでaisatsuという名前の業者が誕生しました。
しかし、これだけでは何も起きません。看板を掲げただけで、まだ発注していないからです。

使うときは、名前を呼びます。

aisatsu(); // こんにちは!いい天気ですね。Code language: JavaScript (javascript)

たった1行書くだけで、{ }の中に書かれた処理(今回の例ではecho文が2行)がすべて実行されます。

100回呼び出せば、100回挨拶します。修正が必要なら、定義の中身を書き換えるだけで、呼び出し元すべてに反映されます。


引数:業者に渡す「材料」

ただ挨拶するだけの業者では困ってしまいます。
状況に合わせて仕事を変えてもらわなければなりません。

そこで渡すのが「引数(ひきすう)」です。

いんすうと読んで恥をかいた人も多いはずです。

これは業者への「発注書」「材料」にあたります。

function aisatsu($name) {
    echo $name . "さん、こんにちは!";
}

aisatsu("田中"); // 結果:田中さん、こんにちは!
aisatsu("佐藤"); // 結果:佐藤さん、こんにちは!Code language: PHP (php)

カッコの中に渡したデータが、関数内の$nameという変数に入ります。
これによって、同じ関数でも渡す材料次第で結果を変えることができます。

今回は「田中」と「佐藤」という文字列を渡していますが、他の文字列を渡せばもちろん「○○さん、こんにちは!」の「○○」の箇所に反映されます。


戻り値:業者からの「納品」

ここからが、関数を習得したい初心者の最大の壁です。

関数には「やりっ放し」と「結果を返す」の2パターンがあります。

計算結果を受け取って、それを別の計算に使いたい場合、関数から値を戻してもらう必要があります。これを「戻り値(もどりち)」と呼びます。

使うキーワードはreturnです。

function tashizan($a, $b) {
    $result = $a + $b;
    return $result; // 計算結果を納品する
}

$answer = tashizan(10, 20); // 30という結果が返ってくる
echo $answer + 5;           // 結果:35Code language: PHP (php)

tasizan(10, 20) という部分は、実行されると30という数値に化けます。

そのため、上記の例では変数$answerに30という数値が入ります。だから、その後の計算に使えるのです。


echoとreturnの違い:独り言か、報告か

よくある間違いがこれです。

「画面に表示したいからechoを関数の中に書けばいいんでしょ?」

間違いではありませんが、使い勝手が悪くなる可能性が高いです。

  • echo:「その場で叫ぶ」行為
  • return「上司(呼び出し元)に書類で報告する」行為

関数の中でechoしてしまうと、その関数は計算結果を画面に出すことしかできません。
「計算結果をデータベースに保存したい」「メールで送りたい」と思った時に使えないのです。

基本的にはreturnで値を返し、表示するか保存するかは、呼び出した側(上司)が決める。

これができる部下(関数)の作法です。


まとめ:メイン担当者は指示出しに専念せよ

プログラムが複雑になってきたら、処理を関数に切り出してください。

  • 定義function 名前() { ... } でマニュアル化
  • 引数()の中に材料を渡す
  • 戻り値returnで成果物を受け取る

語弊があるかもしれませんが、メインのコードには「○○しろ」「××しろ」という指示だけが並んでいる状態が理想です。

詳細な作業手順は、できるだけ関数に保持する。

自分が楽をするために、優秀な下請け業者(関数)を量産し、合理的なプログラムを作っていきましょう!

コメント

タイトルとURLをコピーしました