![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_01.png?8acaa2e)
以下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・・・・
}
以上の「関数」を使った文章の出力に伴い、
ここでいう関数の役割を”わかりやすく”説明いただけないでしょうか・・・
理解力に弱い私にとりまして助かります。
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
質問にあるような処理だけでは関数の恩恵はあまり感じないでしょう。
関数は、特定の希望する処理を一固まりにして、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の後ろの方へ追いやる、ということもできます。
ご回答くださいまして誠にありがとうございました。
さて、サンプルのプログラムですが!非常に参考になります。
後で私なりの研究材料になると思います。
質問したことにより、再度、参考書の7章の関数の最初の説明で
一定の処理をまとめて記述する
とあり・・そこ詳しい説明がありました・・最初はさらさら飛ばし読み
をしたのが悪かったのでしょう・・
私が公開しましたプログラムは関数を本格的に組み込む前の「オープニング曲」みたいなものなので・・「処理が複雑になるとfunction化しないと
だめですよ」筆者は言いたいのだと思います。
No.3
- 回答日時:
関数の役割はいくつかあります
・再利用性
一定の手続きをひとまとめにすることで、同じ様な作業をするときに
関数を呼び出すだけで、同じ様な結果を導くことができます
・可読性
冗長なプログラムはどこの部分が何をやっているかわかりづらくなります
機能ごとに関数化することで、全体の流れがわかりやすくなります
・保守性
冗長なプログラムはバグが出た場合、同じ様な箇所をすべて修正しないといけません
関数化してればその関数を修正すれば該当する箇所全てに反映されます。
また機能を拡張したり、エラーや例外対策する場合なども関数化していると楽です
・ブラックボックス化
関数化すればユーザーは機能だけ理解していれば、その関数内の過程を気にする必要はありません。
したがって自分のプログラミング能力以上の機能を利用することができます
その他もろもろありますが、今の時点では理解しづらいでしょうから割愛
ご回答くださいまして誠にありがとうございました。
同時にお返事が遅れまして申し訳ございませんでした。
さて、なにかと勉強になるご解答と存じます。
役割的に便利な機能ですね・簡素化できるものは簡素して
効率的にやれば仕事もはかどり楽になりる・・・
関数事態もそういうポテンシャルを持っていると存じます。
今後ともよろしくお願いいたします。
No.2
- 回答日時:
まず関数の基本中の基本は、「入力」と「出力」です。
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()で出力するだけ、という感じです。
質問の例では全く関数の利便性が感じられませんが、
コードが複雑になるにつれて、この入力と出力を見分け関数化していくという作業は
とても大切なプログラミングの技術となります。
関数に慣れたら
次は関数とクラスの違いを勉強してみて下さい。
ご回答くださいまして誠にありがとうございました。
同時に、お返事が遅くなり申し訳ございませんでした。
ご紹介していただきました、プロゴラムを実際に動かしたところ
ご紹介していただいた通りになりました。
関数の良い点がだんだんわかってきました。
今後ともよろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PHP PHPプログラムの間違い 1 2022/10/06 14:33
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- JavaScript HTMLでJavaScriptを使ってパスワードの強化判定のプログラムを作成しています。 一通り作っ 2 2022/10/19 01:41
- PHP php ログイン 1 2022/11/01 00:24
- HTML・CSS 下にスクロールしても、追従するボタンのコードを書いたのですが、ボタンの中の画像が半分しか表示されない 1 2022/04/16 21:31
- PHP php テーブルが作成できない 1 2022/11/17 23:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
日付を基にした乱数生成
-
<A href ~で複数の値を渡したい
-
「次の10件を表示する」のよ...
-
2個のプログラムは結果は同じ...
-
POSTされたかどうか確かめる方...
-
PHPのreturn文で関数の値が反映...
-
Dosブロンプトでtabを出力したい
-
switch()文で値の大小比較
-
DTOとEntityの差は何ですか。
-
「取得先」という表現について
-
excel access連携 このテーブル...
-
ファイル名に日付の挿入
-
shシェルスクリプト 空白行の...
-
wordの差し込み印刷で文字...
-
ps3で久しぶりにCDの音楽情報取...
-
【C#】DataGridViewの最大列数...
-
POSTで受け渡したものを保存し...
-
Excel VBA:特定の文字列以降(...
-
開始と終了を指定して、その間...
-
バッチファイルでpingの結果を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
<A href ~で複数の値を渡したい
-
「次の10件を表示する」のよ...
-
テーブルに送信ボタンをつける
-
日付を基にした乱数生成
-
PHPのif文「POSTしていな...
-
PHPでwait処理ってできます?
-
POSTされたかどうか確かめる方...
-
microtime関数は、結構イイカゲ...
-
Google chart API 、PHP、MySQL...
-
vbYesNoの使い方
-
PHP ハイパーリンク
-
アクセスキーについて
-
if (isset($_a)&&$_a)この意味は
-
「ソースコードは 左~右へと読...
-
Luaにて、and or の組み合わせ...
-
<python>戻り値
-
PHP5で 定義されているINFの実...
-
null代入とunset()の違いについて
-
2個のプログラムは結果は同じ...
-
逆順表示したい?
おすすめ情報