質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

6回答

5364閲覧

else句の必要性

tomoyuki123

総合スコア273

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

2クリップ

投稿2017/04/11 04:15

こう書いてる人がいたので

PHP

1if($id) { 2 return false; 3} 4retrun true;

else句入れてくださいってコメントしたら
else句つける派とつけない派ができてしまって

PHP

1if($id) { 2 return false; 3} else { 4 return true; 5}

2つの分岐が対になってるかんじがあった方が見やすいかなと思ったのですが、else句をつけない人が多いようで
PSRとかも改めて見たのですが特に言及されてることもなく、結局は好みの問題になるんでしょうか?

でもやっぱり両方が等しく起こり得ることならelse句つけた方がいいと思うのですが普通どうなんでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答6

0

ベストアンサー

むしろ、「単にreturnするだけのif文」は1行で書いて、あとにインデントを残さない、という方が主流です(「ガード節」という名前までついている書き方です)。

php

1function some_func($arr) { 2 if(!is_array($arr)) return null; 3 if(empty($arr['foo'])) return null; 4 // チェックを済ませた上で、本題の処理を書き始める(後略) 5}

投稿2017/04/11 04:18

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hsk

2017/04/11 04:34

maisumakunさんのご回答に沿った内容が、書籍「リーダブルコード」(オライリージャパン発行)の「7.5 関数から早く返す」「7.7 ネストを浅くする」に少し書かれていますので、機会があれば7章「制御フローを読みやすくする」やそれ以外の項目と併せてご覧になられてはと思います。
tomoyuki123

2017/04/11 11:47

皆様いつもありがとうございます! 色んな考え方があってどうしようかなと思ってますがガード節使って見たり、リーダブルコード読み直してみようかなと思ってます
guest

0

私は、どっちでも良いと思います。

というのも適切に短いメソッドであれば、読み間違える心配がないからです。強制して宗教論争をしてもメリットがあるようには思えません。強制をしないという合意を作った方がいいくらいだと思います。
(逆に、スパゲッティなコードであれば、細かい点まで共通化する意義があります。)

とはいえ、もしこれがガード節であれば、ネストを浅くするためにelseは不要だと思います。

return ! $id;

ちなみに私だっだら質問のコードであれば、このくらいの荒っぽいコードで書きます。elseを書くと5行これだと1行、長いコードよりも短いコードが読みやすいという考えからです。

メソッド名が適切であれば特に問題にはならないとかんがえます。その代り、1行であってもメソッドに分割することは多いです。

投稿2017/04/11 05:04

iwamoto_takaaki

総合スコア2883

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

可読性に言及すると人それぞれと言われそうですが、
スッキリさせるためにはelse句は要らないのではと思います。

また、コード変更の際に if ($id){}以降にコードを追加したとすると、
else句内のreturn true;を見落としてその後のコードが絶対に通らないなんて不具合も起きえます。

さらにはifの条件を複数にする場合、全ての条件を一つのif文に書かなければならなくなるので
if文条件の可読性が下がる場合があります。

PHP

1// これはできるが 2if($id && $name && $data) { 3 return false; 4} else { 5 return true; 6}

PHP

1// これはできない 2if($id) { 3 return false; 4} else { 5 return true; 6} 7if($name) { 8 return false; 9} else { 10 return true; 11} 12if($data) { 13 return false; 14} else { 15 return true; 16} 17

PHP

1// returnが最後なら綺麗 2if($id) { 3 return false; 4} 5if($name) { 6 return false; 7} 8if($data) { 9 return false; 10} 11return true;

上記の条件はシンプルなので1つのif文でもいいですが・・・
一番上のソースだと、どの条件に引っかかったのかログを出す場合にも苦労しそうですよね

投稿2017/04/11 04:26

編集2017/04/11 04:28
Clor

総合スコア883

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

elseを付けるとその次の行に到達しなくなるのが気持ち悪いので、私はまず使わないですね。

PHP

1 if($id) { 2 return false; 3 } else { 4 return true; 5 } 6 // ここに到達しない 7}

なのでこういう風に書くことは良くあります。

PHP

1 $ret = true; 2 if($id) { 3 $ret = false; 4 } 5 return $ret; 6}

しかし一番好みなのはmaisumakunさん回答の方法ですね。
名前がついているのは知りませんでしたが。

投稿2017/04/11 05:36

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

基本的にmaisumakunさんのやり方に賛成ですし
個人的にもほとんどそれでしかコーディングしていませんが
関数を途中で終わらすのが気持ち悪いと思う人もいるでしょうし
プロジェクトによって方針も違うので参考程度に
returnは1度しか発行しないという考え方もあります

PHP

1function myfunc(){ 2ret=true; 3if(条件式){ 4ret=false; 5} 6return ret; 7}

ただ、早々に除外されるようなものもその関数の最後まで処理を追いかける分
非効率だというデメリットはあります。

投稿2017/04/11 05:05

yambejp

総合スコア114843

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ShimpeiAzuma

2017/04/11 08:31

昔、TRONの開発に携わっていた人とお仕事をする事があったのですが、その人に、入り口は1個、出口は1個がソフトウェア工学の基本だとおしえていただきました。それを突き詰めると、この記述方法がとても有効だと気づいて、使ってました。
guest

0

むしろ、自分のつかっているjetbrainのIDEだと、一行で書けるよって忠告が表示されます。

投稿2017/05/16 02:20

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問