プログラミング学習ログ

WEBアプリケーション個人開発を目指す32歳公務員

#4 読書ログサービス作成(テキスト版)その4

f:id:kshinya-tech:20220209090334p:plain

やったこと

  • 独学エンジニア レッスン4.25-28
  • 関数
  • 前回までに作成した読書ログサービスのコードについて、関数を用いて、リファクタリングした。

shinya-tech.com

学んだこと

関数の使い方

関数は、定義→呼び出しで使用する。

関数の定義の仕方

function 関数名(引数1, 引数2, …, 引数n)
{
    # 処理
    return 戻り値;
}

引数と戻り値は省略できる。

関数の呼び出し方

関数名に括弧を付けて関数を呼び出す。

戻り値がある場合

$変数 = 関数名(引数1, 引数2, ..., 引数n)

戻り値がない場合

関数名(引数1, 引数2, ..., 引数n)

サンプルコード

function multiply($a, $b)
{
    return $a * $b;
}

echo multiply(3, 5) . PHP_EOL;

実行結果

15

関数を定義するときのコツ

  1. 変数名を決めて、外枠を作る。
  2. 呼び出し側を先に書く。
  3. 処理の内容を書く。

今回書いたコード

<?php

// 読書ログ登録の関数を定義
function createReview()
{
    echo '読書ログを登録してください' . PHP_EOL;
    echo '書籍名:';
    $title = trim(fgets(STDIN));

    echo '著者名:';
    $author = trim(fgets(STDIN));

    echo '読書状況(未読、読んでいる、読了):';
    $status = trim(fgets(STDIN));

    echo '評価(5点満点の整数):';
    $score = trim(fgets(STDIN));

    echo '感想:';
    $summary = trim(fgets(STDIN));

    echo '登録が完了しました' . PHP_EOL . PHP_EOL;
    // 連想配列の各キーに上記にて、変数に代入された値を格納していく。
    return [
        'title' => $title,
        'author' => $author,
        'status' => $status,
        'score' => $score,
        'summary' => $summary,
    ];
}

// 読書ログ表示の関数を定義
function getReviews($reviews)
{
    echo '読書ログを表示します' . PHP_EOL;

    foreach ($reviews as $review) {
        echo '書籍名:' . $review['title'] . PHP_EOL;
        echo '著者名:' . $review['author'] . PHP_EOL;
        echo '読書状況:' . $review['status'] . PHP_EOL;
        echo '評価:' . $review['score'] . PHP_EOL;
        echo '感想:' . $review['summary'] . PHP_EOL;
        echo '-----------------' . PHP_EOL;
    }
}

// 配列を初期化
$reviews = [];

while (true) {
    echo '1. 読書ログを登録' . PHP_EOL;
    echo '2. 読書ログを表示' . PHP_EOL;
    echo '9. アプリケーションを終了' . PHP_EOL;
    echo '実行したい番号(1,2,9)を入力してください:';
    $i = trim(fgets(STDIN));

    if ($i === '1') {
        // 読書ログを登録する
        $reviews[] = createReview();
    } elseif ($i === '2') {
        // 読書ログを表示する
        getReviews($reviews);
    } elseif ($i === '9') {
        break;
    }
}