はじめに
今回は、初学者がつまづきやすい関数やクラスの概念や使い方を
おにぎりを作ることを例に理解していけたらなと思います。
おにぎりで理解する関数
それではまず関数からやっていきましょう。
まず関数とは、一言にいうと、処理の塊です。
さっそくおにぎりを例にすると、
おにぎりを作るまでに必要なものは、
おにぎりを握る人、白ごはん、おにぎりに入れる具になると思います。
この場合、
おにぎりを握る人のおにぎりを握る処理が関数となり、
おにぎりを握る人に渡すおにぎりの具が引数になります。
引数によって決まった処理をして、処理の結果を返す。
おにぎりの具に(引数)よって、おにぎりを握り(決まった処理)、引数おにぎり(返り値)ができあがる。
このようにおにぎりを握る関数を用意しておけば、具を渡すだけで色んなパターンのおにぎりが出来上がります。
同じような処理をする場合は、
関数を用意してあげていれば、その処理をしたいときだけ、その用意した関数を呼び出せばいいので、
何度も同じコードを書かなくて済むようになります。
では、いざコードにおこしてみるとどうなるでしょうか。
1つの例としてはこんな感じになるかと思います。
// おにぎりを作る関数
// -- step3 -- onigiriTukuruKansuuが具材を受け取りおにぎりを作る処理が走る
// ※ またstep2であげた具材(gohan, onigiri_no_gu)を(gohanHikisuu, guHikisuu)で受け取る。
// ※ 仮にstep2あげた具材を(onigiriNoGu, gohan)という順番にすると、(gohanHikisuu, guHikisuu)ここのgohanHikisuuにはonigiriNoGuが入ってくる。
function onigiriTukuruKansuu(gohanHikisuu, guHikisuu) {
// -- step4 -- 具材がないとおにぎりが作れないので、ifで具材があるかどうかみる(gohanHikisuuがあるか、かつ、guHikisuuがあるか)
// ※ 仮に、if (guHikisuu)こう書いた時、guHikisuuの中になにか値や文字列があればtrue、guHikisuuが空っぽならfalseという判定ができる
if (gohanHikisuu && guHikisuu) {
// -- step5 -- ごはんと具を混ぜてあげる
let onigiri = guHikisuu + gohanHikisuu;
// -- step6 -- 出来上がったonigiriをreturnで返してあげる。(返り値)
// ※ 返ってくる場所は、step2でonigiriTukuruKansuuに作ってもらうと宣言した場所 res_onigiriの中に返ってくる
return onigiri;
} else {
return 'おにぎりの材料がありません';
}
}
// -- step1️ -- 具材の準備 (変数宣言)
let gohan = 'ごはん';
let onigiri_no_gu = 'うめぼし';
// -- step2 -- onigiriTukuruKansuuに具材をあげて作ってもらう (関数宣言)
let res_onigiri = onigiriTukuruKansuu(gohan, onigiri_no_gu);
// -- step7 -- res_onigiriにonigiriが返ってきたので、console.logで出してみる。
// ※ 具材がなかった場合は、step4でelseが走るため、'おにぎりの材料がありません'が返ってくる
console.log(res_onigiri);
// ※ うめぼしごはんとログにでればOK
おにぎりで理解するクラス
次はクラスについてやっていきましょう。
まずクラスとは、よく設計書と例えられがちですが、
それではイメージしにくいのでざっくりというと関数の集まりです。
例えば、昼食を作る時、必要なのは、
おにぎりを作る
おかずを作る
水筒を用意する(水筒はお弁当を作るというくくりには入りませんが数合わせということで)
このような処理が必要になってきます。
LunchRobotクラスがあってその中に、
おにぎりを作る関数
おかずを作る関数
水筒を用意する関数
があるイメージで大丈夫です。
そしてこのLunchRobotクラスの処理によってできたお弁当こそがインスタンスを言います。
では、関数の話のときのようにこれをおにぎりを作る部分をコードにおこしてみるとどうなるでしょうか。
1つの例としてはこんな感じになるかと思います。
<?php
// -- step1️ -- 具材の準備
$obento = new LunchRobot('ごはん', 'うめぼし');
$obento->gohan = 'ごはん';
$obento->onigiri_no_gu = 'うめぼし';
// -- step4 -- onigiriTukuruKansuu()の返り値を出力している。
echo $obento->onigiriTukuruKansuu();
class LunchRobot {
public $gohan;
public $onigiri_no_gu;
// -- step2 -- クラスが呼び出された時に最初走る処理
public function __construct($gohan, $onigiri_no_gu) {
$this->gohan = $gohan;
$this->onigiri_no_gu = $onigiri_no_gu;
}
// -- step3 -- ごはんと具があれば混ぜてあげる。なければ'おにぎりの材料がありません'と返す
public function onigiriTukuruKansuu() {
if ($this->gohan && $this->onigiri_no_gu) {
return $this->onigiri_no_gu . $this->gohan;
} else {
return 'おにぎりの材料がありません';
}
}
public function okazuTukuruKansuu() {
// おかずを作る処理を書く
}
public function suitoTukuruKansuu() {
// 水筒を用意する処理を書く
}
}
今回は初学者の方がつまづきやすい関数とクラスについてお話しました。
最後まで読んでくれてありがとうございます。
ツイッターもやってますのでフォローしていただけると嬉しいです。(@LC_Ono)