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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

解決済

boolを返す関数は可読性がない…? なぜ?

kmtrintr
kmtrintr

総合スコア1

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

2回答

3リアクション

6クリップ

2742閲覧

投稿2022/08/30 04:15

SESで前任者から引き継いだプログラムの、過去に実施されたクライアント側の担当者によるコードレビューを読んでいたところ、気になった点があったのでご相談させてください。

気になったのは、「is_blank()などの名前で、bool型の戻り値をもつ関数は可読性を下げるためダメ」というものでした。そのレビューで提示された代替策によると、関数名をcheck_blank()として、値がブランクならば戻り値を文字列(例えば’error’)を返すのが好ましいとのことでした。

気になったのでしばらくググってみたのですが、boolを返す関数に「is〜」と名前をつけるのは、分かりやすい良い命名規則の一例として紹介されているサイトがいくつもありました。また、boolを返す関数はダメだとマサカリを担いだ記事を見つけることもできませんでした。むしろcheck〜やjadge〜などの関数名をアンチパターンとする記事もありました。個人的にも戻り値に固定の文字列を渡すルールは、同じルールの関数が複数になっていったときに、タイピングミスによるバグを生みそうな気もします。

引き継いだプログラムについては既にレビューに沿って改修されていますので、郷に入って踏襲するつもりではあります。

クライアントの意向やレビュアーの方を批判する意図はないのですが、直接聞きにいくのもいささか角が立ちます。

私はまだ経験の浅い身ですので、どういう意図でこのコーディング規約になっているのかとても関心があります。今後の勉強の参考までに、以下の点について先輩方のご意見をお聞かせいただきたいです。

・boolを返すメソッドが好ましくないとされる、あるいはis〜の命名が好ましくないとされるのは一般的なことですか。それとも現場やレビュアーの好みによるものでしょうか。(他の現場であってもこのような記述をするのは避けるべきでしょうか)

・boolではなくあえて判定用の文字列を返すことによるメリットはどのようなものがありますか (呼び出し側が if check_blank(hoge) == ‘error’: となるので、これが可読性を高めるとするポイントということでしょうか)

・好みの要素が強いならば、最初に学んだ言語の文化が反映されるのではないかなと思います。言語の規則等で、何か関連することがあれば教えてください。(今回はPythonで、過去にjavaでもis〜()関数を見てきました)

以上よろしくお願いします。

yoishi, odataiki, LouiS0616👍を押しています

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

Zuishin

2022/08/30 05:05

戻り値の問題ではなく、命名が不適切だったのではないかと思います。 要するに、戻り値の true と false のどちらが成功かわからない名前なのではありませんか? 実際にレビューを受けた関数名を提示すれば話がはやいかもしれません。
TakaiY

2022/08/30 05:08

特に有用な情報は出せないのでここに書きます。 あなたの感覚が全面的に正しいと思います。[if is_blank():」に一票です。 1メンバーとしての立場なら郷に入っては~もそれが正しいでしょう。
kmtrintr

2022/08/30 05:36

ありがとうございます。実際に指摘のあった関数がまさにis_blankでした。
Zuishin

2022/08/30 05:46

is_blank は「何が」の情報が入っていませんが、それ以外は特に問題ないと思うので、ローカルルールかその人の個人的ルールだと思います。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。