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

プログラムの素朴な質問です
分岐するコードを書く時に、

/**
* 関数
*/
sub(){
....
}

/**
*関数を呼び出すフロー
*/
main(){
...
if(isOk){
sub()
}
...
}

というように書くのと

/**
* 関数
*/
sub(
isOk /* 真偽値 */
){
if(isOk){
....
}
}

/**
*関数を呼び出すフロー
*/
main(){
...
sub(isOk)
...
}


と書くのはどちらの方が見やすく使いやすいのでしょうか?
オーバーヘッドのことを考えると後者は論外でしょうけども...

A 回答 (7件)

コード云々よりも、


JavaDoc を単純にわかりやすく書けるかで判断しましょう

前者の例)
Δ を ε します.
@return ε の結果

後者の例)
α が β を γ した場合に限り Δ を ε します.
@param isOK α が β を γ したら true
@return α が β を γ した場合は ε の結果, それ以外は null
    • good
    • 0

>callSubByChecked(


>yes /* 真偽値 */
>){
>if(yes){
>sub()
>}
>}

何の為の関数でしょう?
分岐するだけならifで充分。
皮を被せる分ロジックが分散して
分かりにくくなるだけです。
    • good
    • 0

あ、訂正。



> 多分バカ正直にSubは書かんね。

と言うより「バカ正直に分岐は書かない」だな。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
Switch文のようなことをイメージしているのかもしれないですがそれは程遠いと思います。

お礼日時:2024/02/07 13:04

C言語?


カテゴリ的には違うか・・・・・・。

> 補足として、isA,isB,isCみたいな分岐が5つ以上ある時も同様の結論ですか?

個人的には、だよ。
しかもC言語じゃないとすれば。
しかも連想配列とラムダ式が使える言語なら。
「分岐が5つ以上ある」時点で連想配列を使うトリックに持ち込めないか、って考えちゃう。
多分バカ正直にSubは書かんね。

ただ、それでも、構造的には、「何らかの判定をくだして連想配列から(関数を含む)データを持ってくる」にせよ、その「指令を出す」のは上の例で言うとmain関数の役目じゃねぇのかな。
Subが真偽値を返す事はあり得ても、Subが真偽値を引数として取る、ってのはどのみち不自然な気がするよ。
    • good
    • 0

>isA,isB,isCみたいな分岐が5つ以上ある時も同様の結論ですか?



処理の指示に不可欠なパラメー夕ならOKですよ。

分岐がどうのこうのは全く関係ないです。
形じゃなくて意味で考えましょう。

sub()が何のためにある処理なのか明確で
出来うる限り単機能であり
isAとかがその処理に必要なパラメー夕なら
何の問題も無いです。

無秩序に上位処理の都合で機能が曖昧で多機能になり
その分岐のためにフラグパラメー夕を増やすやり方は
最悪のバッドプラクティスとして知られてます。
ソフトのメンテナンスの大きな障害になります。
    • good
    • 0
この回答へのお礼

ありがとうございます。
処理に不可欠なパラメータか?はあまり考えて欲しくないため以下のような関数を別に作るケースを考えます。これはありですか?

callSubByChecked(
yes /* 真偽値 */
){
if(yes){
sub()
}
}

お礼日時:2024/02/07 13:13

これだけでは何とも言えないけど



isOk が subの処理(機能)にとって必要不可欠なら
最後の形式で良いが、単に sub の中身を実行するかしないか
制御するために引数を渡すのは言語道断。

上位で判断するべきものを下位のルーチンに無理に引き摺りこませる
のは、処理が複雑化するだけで、メリットが無いです。
シンプルイズベスト

パラメータによって何もしないことがその処理の一つのやり方に
なっているなら良いのですが、そういう理由も
何もなしに上位処理の都合だけでそういう実装をすることは
好ましくないです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
補足として、isA,isB,isCみたいな分岐が5つ以上ある時も同様の結論ですか?

お礼日時:2024/02/07 09:25

前者の方が使い勝手が良い。



特にモジュール化して使う場合は絶対に前者。
垂れ流しでモジュール化なんて考えなければ後者でも良いでしょう。
(後者は階層になってない。if文で置き換え可能なケースが多い)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
補足として、isA,isB,isCみたいな分岐が5つ以上ある時も同様の結論ですか?
また、単に実行したい場合はtrueを引数として与えれば良いですがそれではダメですか?

お礼日時:2024/02/07 09:25

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A