- ベストアンサー
is接頭字
関数名などでis・・・みたいのがあると思いますが、疑問文の意味だと思いますが、正確には、なんと呼ばれて、どのように戻り値を使うのしょうか?また、そのほか一般的なそういったプログラムでの規約集みたいなものがあれば教えてください。ハンガリアン記法などは変数名などでありますが、関数名などの場合はどのようなものがあるでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
疑問文ではなく仮定文と考えてください。例えば、 > if (isdigit(c)) { は、英語で > if c is digit then と読みかえる感じ。 この方式は、オブジェクト指向となじみやすく、例えば文字クラスにisdigitメソッドがあれば、 > if (c.isdigit()) { と、英語そのままの語順に書き下せます。 この方式で命名するメリットは、関数がどういうときに真を返すのか分かりやすいことです。 単語が意味する条件を満たすときに「真」(Cなら!0、C++ならtrue)を、 条件を満たさない時は「偽」(Cなら0、C++ならfalse)を返すように設計します。 これが、もし「checkdigit」という関数だったりすると、 「引数が数字(digit)かどうか調べる(checkする)」関数であることは分かっても、 数字だったときには真を返すのか偽を返すのかがわかりません。 使い勝手が悪いですし、バグの温床となります。 条件次第では、is 以外の名前を使う場合もありますが、 is 以外にも、条件を意味する動詞をそのまま関数名にする場合が多いです。 上記のような英語の仮定文を関数名にする、という観点では、do やdoes が関数名に付くことはあまりありません。 オブジェクト志向では、オブジェクト同士の関係として「is-a」「has-a」の関係が重視される場合が多く、 そういう関係をチェックするメソッド名には、is とか has で始まる名前が付くことになります。
その他の回答 (3)
- jacta
- ベストアンサー率26% (845/3158)
> is・・・の意味は is this a pen?の疑問文からきたものということでいいでしょうか? はい。英語の繋辞(be動詞)であるisのことです。 そのため、~であるか否かを判定する関数に使っています。 標準C++ライブラリのstd::has_facetように、ある特性等を有しているかどうかを調べる関数はhasで始まります。 一方、doで始まる関数には、std::ctype<T>::do_toupperのようなものがあります。これはNVI(=Non-Virtual Interface)を実現するために、公開メンバ関数であるstd::ctype<T>::toupperから呼び出される(限定公開の)仮想関数です。 英語の厳密な文法に従っているわけではありませんので、std::ctype<T>::do_isのような関数もあります。
お礼
ありがとうございます。そういった正式ではない規約の一覧みたいなのがあると、便利かとおもうのですが、英語からだいたい想像はできるはするのですが。 std::ctype<T>::do_isはbool値の確認をするということですか?
- jacta
- ベストアンサー率26% (845/3158)
標準関数のisalpha等、<ctype.h>で宣言される関数のことでしょうか? 以下、そう解釈して回答します。 > なんと呼ばれて、 JIS X3010:2003では「文字種分類関数」と呼んでいます。 > どのように戻り値を使うのしょうか? (戻り値というより)「返却値」がゼロであれば偽、非ゼロであれば真になります。具体的には、isdigitがゼロを返せば実引数の文字は数字ではなく、非ゼロを返せば数字ということになります。 > また、そのほか一般的なそういったプログラムでの規約集みたいなものがあれば教えてください。 規約集というのはありません。 ただし、C90からある標準関数の場合、外部結合を持つ識別子は、大文字・小文字が区別されるとは限らず、先頭から6文字しか有意な識別子であることが規格上保証されませんので、その範囲で命名しています。
お礼
ありがとうございます。is・・・の意味は is this a pen?の疑問文からきたものということでいいでしょうか?
- don_go
- ベストアンサー率31% (336/1059)
英語の、「This is a Pen.」に使用されている is と 同じです。 戻り値としては、通常True(真) と False(偽)が使用 されます。 「これは…です。」に対して True :はい、…です。 False:いいえ、…ではありません。 といった使いかたをします。
お礼
ありがとうございます。英文でisを使わない場合でもtrue,falseのブール値を聞きたい場合はisを使用するということでいいんでしょうか?たとえば、do did doesなど、、、ありますが、、
お礼
ありがとうございます。納得できました。