Upgrade to Pro — share decks privately, control downloads, hide ads and more …

関数を作るときに気をつけていること(PHPで説明)

 関数を作るときに気をつけていること(PHPで説明)

配信動画はこちら
https://www.youtube.com/watch?v=xwTrAzweGCY

もし良かったらムーザルちゃんねるのチャンネル登録お願いします!
https://www.youtube.com/channel/UCLPHXwLp90A5R69Eltxo-sg

Twitter でもプログラミングネタをつぶやいているのでフォローお待ちしております。
ムー
https://twitter.com/mu_vpoe
zaru
https://twitter.com/zaru

mu_zaru

July 23, 2020
Tweet

More Decks by mu_zaru

Other Decks in Programming

Transcript

  1. 関数を作るときに 気をつけていること YouTube Live (2020.07.23 Thur. 21:00~) CTO と VPoE

    が初学者向けに講義する オンライン勉強会です。 随時質問なども受け付けていますので、 お気軽にどうぞ。 ハッシュタグ #mu_zaru
  2. 話す事とゴール 話す事 - 関数とは? - 避けるべきアンチパターン - 関数をつくって学ぶポイント ゴール -

    次から関数を書く時に迷わない - 読みやすいコードが書ける 話さない事 - 言語特有のこと - クラスやデザインパターンなど
  3. 話す人 現役のエンジニア二人 赤貝が好きな CTO と デザイン勉強中のエンジニア @mu_vpoe 最近は SwiftUI で

    macOS アプリづくりが 趣味 ムー zaru @zaru CTO, Love 赤貝, JavaScript, Firebase, Web Components. Twitter フォロー お願いします!
  4. こんな関数は嫌だ 名前が抽象的すぎる Bad function exec () {} Good function updateUserData

    () {} 抽象的で名前からは具体的に何をするのかが読み取れな い。そのような関数は、実装コードを読む必要があるの で可読性が低い。 動詞 + 目的語 で作るケースが多い。 (*) クラスメソッドなど適切な名前空間がある場合は、 クラス名が prefix になることがあるので省略されても読みやすいこともある
  5. こんな関数は嫌だ 名前が複雑でわかりにくい Bad function updateAndSendEmailByOrderIdWi thTransactionalPayment () {} Good function

    update () {} function sendEmail () {} function payment () {} もし作った関数名が、良かれと思って具体的な名前をつけた時に あまりにも複雑で分かりにくかった、もしくは名前が思いつかな い場合は、その関数が色んな役割を持ちすぎている可能性があ る。 適切に分割をし、それら関数を呼び出す関数を作るのが良い。
  6. プログラム内 プログラム内 こんな関数は嫌だ 名前から想像する挙動と違う Bad function getData () { //

    データベースや外部 API など // 時間のかかる処理をする } Good function fetchData () { // データベースや外部 API など // 時間のかかる処理をする } get や set などは外部リソースに依存せず即時処理が完了する事 をイメージするが、外部リソースに依存している場合は fetch な ど、想像つくものが名前についていると良い。 get データ データ fetch
  7. Bad Good 作った当初は名前と挙動が一致していた が、仕様変更が入った際に、関数名を変更 せずに挙動を変更してしまったケース。 面倒くさがらずに名前もきちんと修正す る。 function create ($data)

    { // データから新規作成する } function upsert ($data) { // なければデータを作成するが // あったら更新処理をしている } function create ($data) { // データから新規作成する // もし既に存在していたら更新する } 仕様変更が入った こんな関数は嫌だ 名前から想像する挙動と違う
  8. こんな関数は嫌だ 引数が6個以上ある Bad function update ( $a, $b, $c, $d,

    $e, $f ) { } Good function update ($object) { // $object->a } 引数が多すぎると呼び出す側も覚えるのが大変だし、関数側も煩 雑になる。もし、色々なデータを渡す必要がある場合は、オブ ジェクトなど構造化されたデータにして渡すと良い。
  9. こんな関数は嫌だ 複数の役割が混じっている Bad function update ($arg) { if ($arg ==

    'hoge') { // 複雑で↓と全然違う処理 } else if ($arg == 'piyo') { // 複雑で↑と全然違う処理 } } Good function updateHoge () {} function updatePiyo () {} 1つの関数で、ロジックが異なるものを無理やりまとめない。 抽象化すると両方ともデータを更新するという意味で同じだが、 更新対象やデータ構造が異なる場合は、素直に別関数にした方が 良い。
  10. こんな関数は嫌だ return が必ず最後 Bad function update ($data) { $result =

    validate($data); if ($result) { // 更新処理など $result = true; } else { $result = false; } return $result; } Good function update ($data) { $result = validate($data); if (!$result) { return false; } // 更新処理など return true; } 早めに返せる状況であればすぐ return させた方が良い。コード を最後まで読まないと何が返ってくるかが確定できないと、脳内 のメモリがリークしてしまう。 最後まで 読まないと 分からない
  11. お題 お店でお買い物をします。各商品の消費税は軽減税率 によって 8% か 10% の違いがあります。消費税を考 慮し、支払い金額を計算してください。 $cart =

    [ ['item' => 'お酒', 'price' => 300, 'quantity' => 4], ['item' => 'りんご', 'price' => 100, 'quantity' => 2], ]; $taxList = [ 'お酒' => 10, 'りんご' => 8, ]; $ php sample.php 1536