電子書籍の厳選無料作品が豊富!

以下2個のプログラムは結果は同じですが、関数を使用しての文章が出力される過程を知りたい。
-----------------------------------------------------------------------
 「自作プログラム」
<!DOCTYPE html>
<html>
<head>
<title>P198 Sample7-1 (自作)関数省略での文章出力</title>
</head>
<body>
<?php

print "<hr/>\n";
print"商品をおかいかげいただきました。<br/>\n";
print"<hr/>\n";
?>

</body>
</html>
----------------------------------------------------------------------------
 「参考書通りのプログラム」
<!DOCTYPE html>
<html>
<head>
<title>P198 Sample7-1 関数追加後の文章出力</title>
</head>
<body>
<?php
buy();
function buy()
{
print "<hr/>\n";
print"商品をおかいかげいただきました。<br/>\n";
print"<hr/>\n";
}
?>
</body>
</html>
---------------------------------------------------------------------
 以上の2種類のプログラムの結果は同じですが、後半の「参考書通りのプログラム」
は関数を使っています。その関数の参考書関数の説明で理解に苦しんでおります。・・

 buy();
function buy()
{
  print・・・・


 以上の「関数」を使った文章の出力に伴い、
 ここでいう関数の役割を”わかりやすく”説明いただけないでしょうか・・・
  理解力に弱い私にとりまして助かります。
 よろしくお願いいたします。

A 回答 (3件)

質問にあるような処理だけでは関数の恩恵はあまり感じないでしょう。



関数は、特定の希望する処理を一固まりにして、1行関数を呼び出すだけで、その処理を行ってくれるものです。
色んな処理があった時、だらだらコードを書いていると、どこからどこまでが何の処理をしているのか、ということが大変不明瞭になります。

また、全く同じ処理が複数個所に存在した場合、だらだら書いている場合は、全く同じ処理を何度も書くという、なんとも無意味なコードを書くことになります。

そのため、『Aをする関数』、『Bをする関数』などと分けて、それらをそれぞれ呼び出して使います。
参考書を進めていけばコード量も増え、必要性が分かってくるのではないでしょうか。


また、質問のコードは以下のようにすることも可能です。
<!DOCTYPE html>
<html>
<head>
<title>P198 Sample7-1 関数追加後の文章出力</title>
</head>
<body>
<?php buy(); ?>
</body>
</html>
<?php
function buy()
{
print "<hr/>\n";
print"商品をおかいかげいただきました。<br/>\n";
print"<hr/>\n";
}

PHPをHTMLと混在して記述すると、往々にして、どこがHTMLの部分で、どこがPHPの部分かが一目で分かりづらいです。
特にHTMLのインデントを邪魔したり、開始タグと終了タグがやたら離れて、いつ終わるのか分からないなど。
上記のようにすると、buy();を呼び出している箇所以外は全てHTMLであり、実際の関数は、全部HTMLの後ろの方へ追いやる、ということもできます。
    • good
    • 0
この回答へのお礼

ご回答くださいまして誠にありがとうございました。
さて、サンプルのプログラムですが!非常に参考になります。
 後で私なりの研究材料になると思います。
質問したことにより、再度、参考書の7章の関数の最初の説明で
 一定の処理をまとめて記述する
 とあり・・そこ詳しい説明がありました・・最初はさらさら飛ばし読み
をしたのが悪かったのでしょう・・
私が公開しましたプログラムは関数を本格的に組み込む前の「オープニング曲」みたいなものなので・・「処理が複雑になるとfunction化しないと
だめですよ」筆者は言いたいのだと思います。

お礼日時:2016/05/20 15:26

関数の役割はいくつかあります



・再利用性
一定の手続きをひとまとめにすることで、同じ様な作業をするときに
関数を呼び出すだけで、同じ様な結果を導くことができます

・可読性
冗長なプログラムはどこの部分が何をやっているかわかりづらくなります
機能ごとに関数化することで、全体の流れがわかりやすくなります

・保守性
冗長なプログラムはバグが出た場合、同じ様な箇所をすべて修正しないといけません
関数化してればその関数を修正すれば該当する箇所全てに反映されます。
また機能を拡張したり、エラーや例外対策する場合なども関数化していると楽です

・ブラックボックス化
関数化すればユーザーは機能だけ理解していれば、その関数内の過程を気にする必要はありません。
したがって自分のプログラミング能力以上の機能を利用することができます

その他もろもろありますが、今の時点では理解しづらいでしょうから割愛
    • good
    • 0
この回答へのお礼

ご回答くださいまして誠にありがとうございました。
同時にお返事が遅れまして申し訳ございませんでした。
 さて、なにかと勉強になるご解答と存じます。
役割的に便利な機能ですね・簡素化できるものは簡素して
効率的にやれば仕事もはかどり楽になりる・・・
 関数事態もそういうポテンシャルを持っていると存じます。
今後ともよろしくお願いいたします。

お礼日時:2016/05/21 15:22

まず関数の基本中の基本は、「入力」と「出力」です。



y = f(x)

xという入力が与えられるとf(ファンクションの略)という何かしらの作用があって、yとして出力されます。
よくある例では、お金(x)を入れると自動販売機の中で何かしらの操作があって、ジュースとお釣り(y)が出力されます。


function buy()
{
  print"商品をおかいかげいただきました。<br/>\n";


の場合は、入力のないprintだけの機能を持った関数ですね。

>商品をおかいかげいただきました
と日本語が間違っていますが、もしこれが「自作プログラム」のパターンで
色々な所で記述されていたとしたら、各場所で1つずつ訂正していかなければいけません。

けれども、これを関数化しておけば
functionの中の文字を訂正するだけで、あとはbuy()で表示されている部分はそのままでいいのです。



※つまり、

関数は入力に対しての出力をまとめておくという役割をもたせます。

<?php
buy("アイス");
buy("ラーメン");

function buy($goods)
{
print "<hr/>\n";
print $goods."をお買い上げ頂きました。<br/>\n";
print"<hr/>\n";
}

?>

上記のようなコードを表示させてみて下さい。
>アイスをお買い上げ頂きました。
>ラーメンをお買い上げ頂きました。
と表示されますが、

buy()の中の文字を変えるだけで、可読性にも優れていると思います。
()の中の値を引数と言いますが、これが入力の部分ですね。

functionの中でごちゃごちゃ作業をまとめておいて
後はbuy()で出力するだけ、という感じです。

質問の例では全く関数の利便性が感じられませんが、
コードが複雑になるにつれて、この入力と出力を見分け関数化していくという作業は
とても大切なプログラミングの技術となります。

関数に慣れたら
次は関数とクラスの違いを勉強してみて下さい。
    • good
    • 0
この回答へのお礼

ご回答くださいまして誠にありがとうございました。
同時に、お返事が遅くなり申し訳ございませんでした。
ご紹介していただきました、プロゴラムを実際に動かしたところ
ご紹介していただいた通りになりました。
関数の良い点がだんだんわかってきました。
今後ともよろしくお願いいたします。

お礼日時:2016/05/21 15:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!