ぽざうねっと

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  420  : 記事  0  : コメント  9718  : トラックバック  76

ニュース

さて、今年は何を漬けようか

書庫

日記カテゴリ

Accessory

Community

Private

public static bool CheckTextByteLength(string text, int maxLength) {
    bool retFlag = true;
    Encoding sjis = Encoding.GetEncoding("Shift_JIS");
    if (maxLength < sjis.GetByteCount(text)) {
        retFlag = false;
    }
    return retFlag;
}
実際に現在の現場で使われているよくあるメソッドです。
たった数行のソースなれど、私は非常に読みづらいソースだと思います。
bool 値だからたった二種類の値しか返さないのですが、ぱっとみてどのときに true かわかりにくくないですか?
しかもこのメソッドは、特定の条件ならば false を返すという意味に重きがおかれています。
bool を返すメソッドにおいて、利用者が一番知りたいのは true になる条件ではないでしょうか?
public static bool CheckTextByteLength(string text, int maxLength) {
    Encoding sjis = Encoding.GetEncoding("Shift_JIS");
    return sjis.GetByteCount(text) <= maxLength;
}
この場合、これで十分なわけです。
bool 値を返すメソッドの場合、「○○のとき true, そうじゃないとき false」というような記述よりも、「○○かどうかを返す」という記述をしたほうがよりわかりやすいと思います。
もちろん、そんな単純なロジックのメソッドばかりじゃないでしょう。
そんな場合でも、同一メソッド内で if 文などで使用しない限り、変数に格納するのではなく return true; と直接書いて欲しい。
メソッドが長くなればなるほど、「結局どんなときに true になんのよ?」ってのが把握しづらくなる。
ま、私のどたまが悪いからといわれたらどうしようもないですが。
投稿日時 : 2007年4月25日 8:34

コメント

# re: 真偽値を返すメソッドにおいて 2007/04/25 9:34 R・田中一郎
はげどう(平仮名で書くと変)

基本的に長くなればなるほど、読みにくさもバグを含む可能性も高くなるわけです。
唯一、長くするための理由として「わかりやすさのため」というものがあります。

前者コードは、長いのにわかりにくいから駄目です。


# re: 真偽値を返すメソッドにおいて 2007/04/25 9:35 επιστημη
僕ならいっそshift_jisでの長さを返す ByteLength(string) だけにしちゃって、呼び側で

if ( ByteLength(なにか) >= 許容長 ) ...

ってやるかも。そーすりゃ真偽は明らかだし。


# re: 真偽値を返すメソッドにおいて 2007/04/25 9:41 シャノン
俺ならメソッド名を「IsTextLongerThan」とかにする(英語的に正しいかどうかはご愛敬)。
「bool 値を返すメソッドの名前にCheckをつける」ってのは俺の中ではご法度の一つ。
短ければいいのか長ければいいのかがメソッド名から分からない。

# re: 真偽値を返すメソッドにおいて 2007/04/25 11:10 とっちゃん
おいらだったら... uint GetLengthSJIS( string ) かなw
段取りは、えぴさんとおなじw


# re: 真偽値を返すメソッドにおいて 2007/04/25 12:26 かずくん
ちょっと違う話になってしまうけど、真偽値の扱いを理解していないという点で、勘弁して。

むかし、こんなのをどこかで見た
void Hoge(bool b) {
if (b = true) {
uge.Flag = true;
}
else {
uge.Flag = false:
}
}

いろんなところで、突込みどころ満載。

# re: 真偽値を返すメソッドにおいて 2007/04/25 12:59 シャノン
> いろんなところで、突込みどころ満載。

一番のツッコミどころは、uge.Flag は決して false にならないというところか。

# re: 真偽値を返すメソッドにおいて 2007/04/25 13:02 ひろえむ
私なら英語であれば
bool IsTextExceedMaxLength(string targetValue, int length)
日本語であれば
bool テキストは最大桁数を超過している(string 比較対象文字列, int 長さ)
とかにするかなぁ。

理由はシャノンさんと同様で名が体を表していないから(^^;

"Checkうんちゃら"だったり"うんちゃらCheck"とかって命名をよく見かけますが、その名前から何型が戻ってくるのかわからないし、おまけに何をチェックしているのかも抽象的すぎてわからなかったりするんですよね(^^;

たとえば今回の場合、maxLengthという引き数名を見れば最大桁数を比較するんだろうなとわかるんでしょうが、実際コーディングされる際には

if(CheckTextByteLength(strValue, 8)) {
処理();
}

となっていたら、何をチェックしているのかわからなくなる気がします(^^;
長さをチェックしていることはわかるんですが、長いのか短いのかオーバーしているのか、範囲チェックしているのか・・・。

なので、戻ってくる値とチェックしている内容を明確に表現していないと可読性を落とすことになりそうな気がします(^^;

# re: 真偽値を返すメソッドにおいて 2007/04/25 13:25 通りすがってない
なんかいつもわんくまさん達の意見と違うんですが、私はこう思います。
・ Check~ は何かをチェックする。
・ チェックしてダメなら false、よければ true を返す。
・ 引数に maxLength とあるので、桁数はこれを超えてはいけない。
合わせると、桁数をチェックして長ければ false になると...

正当化しようと必須なんですが、白状すると、私は例に挙げられたようなコードを書いてますww
(if で判定するか return 式; とするかは、また別の要因が働きますが)
もちろんポリシーを持ってそうしてます(これが一番やっかい?w)

> 一番のツッコミどころは、uge.Flag は決して false にならないというところか。
C# だと2個所でコンパイルエラーになりますw

(名前が微妙にころころ変わってすみません...)


# re: 真偽値を返すメソッドにおいて 2007/04/25 13:28 通りすがってない
誤:必須 正:必至
※注意:訂正する目的で間違ってるんじゃないです...

# re: 真偽値を返すメソッドにおいて 2007/04/25 13:33 通りすがってない
> C# だと2個所でコンパイルエラーになりますw
またまたすみません。間違っていました。これは見なかったことに...

# re: 真偽値を返すメソッドにおいて 2007/04/25 14:01 シャノン
> ・ チェックしてダメなら false、よければ true を返す。

個人的には、これが暗黙知なのが、最大のダメポイントですね。

# re: 真偽値を返すメソッドにおいて 2007/04/25 14:29 通りすがってない
そうなんでしょうね...
私のコメントでは正当化するための必死さが全然伝えられていませんでした。
この点を補足しようといろいろ文章を考えたのですが、「暗黙知なのが、最大のダメポイント」の壁を超えることはできませんでした。
私には援軍は来ないでしょうか...
ただこれだけは言わせてください。訂正した誤字が間違ってたorz...


# re: 真偽値を返すメソッドにおいて 2007/04/25 14:40 シャノン
> 私には援軍は来ないでしょうか...

あ、お気を害されましたら申し訳ないです。

ちょっと援護。
今回は前提が「真偽値を返す場合」ですが、例えば取り得る結果が3値ある場合は、「Is~」にはできません。
そういう場合の命名は…Check?
3パターンのどれなのかをメソッドではなく呼び出し側に判断させる方がベターでしょうかね?

# re: 真偽値を返すメソッドにおいて 2007/04/25 14:57 通りすがってない
> ちょっと援護。
言ってみるものですね~
書かれた場面では Get~ にして呼び出し側で判定すると思います。
けど援護になっていないと感じるのは私だけ~w

# re: 真偽値を返すメソッドにおいて 2007/04/25 15:06 ひろえむ
>回は前提が「真偽値を返す場合」ですが、例えば取り得る結果が3値ある場合は、「Is~」にはできません。
>そういう場合の命名は…Check?

んー、そういう場合はモノにもよりますが、Enumで定義しておいて、Get~でとってくるかなー(^^;;;

たとえば、データが真偽か値なしかを判定するのに
enum ResultType {
None,
TrueValue,
FalseValue
}


ResultType GetResult()

てな感じでしょうか(^^;

そうやっていくと、Checkという単語を使う場面てプロパティくらいしかないのかなぁと思うんですよね。"なんとかチェック"をしたいときにTrueに設定するとか。
CheckFileExist
とかね(^^;

# re: 真偽値を返すメソッドにおいて 2007/04/25 15:08 ひろえむ
あ、かぶっちゃった(^^;

# re: 真偽値を返すメソッドにおいて 2007/04/25 15:15 R・田中一郎
>ただこれだけは言わせてください。訂正した誤字が間違ってたorz...

面白すぎる・・・

# re: 真偽値を返すメソッドにおいて 2007/04/25 18:00 επιστημη
Is~と命名できるのは戻り値がboolだからであって。
二通りの戻り値、'みかん'と'りんご'のどっちかが得られるものに対し
Isみかん() とはせんだろー、と。
# これはむしろ 'みかん' か 'ほかのなにか' かを判断するbool関数。

そうなると結局判断は呼び側に任すわけで、
> if ( ByteLength(なにか) >= 許容長 ) ...
と同じコト。

# 脱線ギミです。すんません。


# re: 真偽値を返すメソッドにおいて 2007/04/25 18:04 シャノン
> 二通りの戻り値、'みかん'と'りんご'のどっちかが得られるものに対し
> Isみかん() とはせんだろー、と。

そうですね。
「アプリケーションを終了するには [OK] をクリックしてください。アプリケーションをデバッグするには、[キャンセル] をクリックしてください。」
なんて、糞くらえの典型例ですw


# re: 真偽値を返すメソッドにおいて 2007/04/25 20:40 ひろえむ
ん?

>Is~と命名できるのは戻り値がboolだからであって。
>二通りの戻り値、'みかん'と'りんご'のどっちかが得られるものに対し
>Isみかん() とはせんだろー、と。

ん? なんか問題がすり替わっていませんか?

みかんかどうか判断する必要があるのであればIsみかん()でいいですし
2通りの戻り値を取得したい(という役割)のであれば、そういった命名(たとえばGetくだもの()とか)が必要だと思います。

この2つの問題を一緒にしている理由がわかりません。

># これはむしろ 'みかん' か 'ほかのなにか' かを判断するbool関数。

なので、これが理解できません(^^;
ここから

>そうなると結局判断は呼び側に任すわけで、
>> if ( ByteLength(なにか) >= 許容長 ) ...
>と同じコト。

これになぜつながるんですか?(^^;
私があほぅなだけ?(^^;;;

# re: 真偽値を返すメソッドにおいて 2007/04/25 21:06 THREE-ONE
も、盛り上がってる(汗)
しかもほとんどがメソッド名の話題だ。
私が個人的に作るなら、えぴさんと同じやり方にしますねー。
メソッド名に SJIS を含めるかどうかは、アプリケーションの環境しだいかなぁ。
でも、Check のつくメソッドは許容します。
ドキュメントコメントがちゃんと書いてあるというという前提でですが。


# re: 真偽値を返すメソッドにおいて 2007/04/25 21:47 επιστημη
あ、いや、boolを返すものだけ特別にIs~にしなくてもいいよなー、とふと思ったわけでして。
うまく処理できたか否かを返すのに IsOK() なんてのはよくやるけども、
これだって GetResult() でいいような(たぶんやんないけど)。
戻り値の型が "たまたま" boolなだけなんだから。


# re: 真偽値を返すメソッドにおいて 2007/04/25 23:13 ひろえむ
あ、なるほど。 わかりました(^^)

ただ、私の場合、何を評価しているのか、なんで評価しているのかをできるだけ表現する手段としてメソッド化して表現するってことが結構多いです。

もちろん、そのままの条件を表現することで理解しやすいのであればそれでやりますが、コメントがついていないと読みにくいケース(表現しきれないケース)が多い気がするんですよね(^^;

コメントは最低限にしたいほうなので(^^;;;

# re: 真偽値を返すメソッドにおいて 2007/04/26 8:33 ひろえむ
あ、肝心な主のメッセージを(^^;;
>でも、Check のつくメソッドは許容します。
>ドキュメントコメントがちゃんと書いてあるというという前提でですが。

いや、Checkを名詞的に使っているメソッド名ならありなのかもしれませんが、"ほげほげCheck"や"Checkほげほげ"って見た目からしておかしくないですか?

少なくともBool値が帰ってくるように読めない気がするんですよね。
なので、問い合わせしているんだったら問い合わせしているらしい命名が重要だと思うんです。 

なので、"Isうんたら"であったり"Canうんたら"であったり、"Getなにがし"のような何かを問い合わせたり取得したりという感じのメソッド名をつけるなぁって思うんですよ。

なので、私は何が何でもCheckをつけないっていうワケではないですね(^^;
たとえば、GetなにがしCheckResult()というあらかじめそのチェックそのものが名前として存在している場合はありかな(^^;

# re: 真偽値を返すメソッドにおいて 2007/04/27 0:32 THREE-ONE
状況によりけりだと思うんですよねー。
私はCheckほげほげは使いませんが、Validateほげほげはよく使います。
”検証する”、”確認する”という行動と検証結果が重要で、どんな検証しているか?なんてのは隠蔽されてていい状況ってないですか?
たとえば、画面クラスがビジネスクラスの検証メソッド呼び出すときとか。
仕様はロジッククラス内で閉じていればいいと思うので、”ほげほげを検証する”というメソッドで十分じゃないかなーと思うときはあります。
さすがに、今回のような低層で利用されるメソッドには個人的には使わないですが。

# vyrwfm@softbank.ne.jp 2017/07/16 21:11 ウブロブランド激安市場
ブランドスマホケース/カバー激安通販ショップ
ご来店いただき誠にありがとうございます。
当店では「信頼第一、サービス第一」をモットーに、お客様第一主義で営業しております。取扱商品としては、iPhoneスマホケース、iPadケース、SAMSUNG GALAXY スマホケース、バッテリー&充電器や、関係する物などです。皆様のニーズにお応えすべく各種製品を取り揃えております。
ごゆっくりお買い物をお楽しみください。皆様のお求めになりたい商品がきっと見つかります。
休業日: 365天受付年中無休
ウブロブランド激安市場 http://www.bbagok.com

# re: Ruby で数値を 0 埋めする 2019/01/24 13:56 zzyytt
http://www.airmax90.us.org
http://www.goyard-handbags.us.com
http://www.michaeljordanshoes.us.com
http://www.adidasnmds.com
http://www.vans-outlet.us.com
http://www.adidasshoesonline.com
http://www.russellwestbrookshoes.us.com
http://www.adidasnmds.us.com
http://www.nike-hyperdunk.us.com
http://www.goldengoose-outlet.us.com
http://www.jordan11retro.us.com
http://www.nikehuaracheshoes.us.com
http://www.bape-hoodie.us.com
http://www.curry5shoes.net
http://www.hermesbelts.co.uk
http://www.fila-shoes.us.com
http://www.jordanshoes.org.uk
http://www.guccibelt.us.com
http://www.adidaseqts.com
http://www.yeezy-shoes.org.uk


# pCIXxOTPexVICfLHLz 2021/07/03 1:29 https://openarticlesubmission.com/nifty-floor-repa
Woah! I am really digging the template/theme of this site. It as simple, yet effective.

# xgWAIbYXpTSYHOYLNA 2021/07/03 4:27 https://www.blogger.com/profile/060647091882378654
leisure account it. Look advanced to more introduced agreeable from you!

# re: ?????????????? 2021/08/08 1:12 what is hydroxychloroquine 200 mg
premature babies wikipedia https://chloroquineorigin.com/# dosage for hydroxychloroquine

# yoeiif@live.jp 2021/11/28 2:10 ルイヴィトンバッグ
時計,バッグ,財布,ルイヴィトンコピー,エルメスコピー
弊店に主要な販売する商品は時計,バッグ,財布,ルイヴィトンコピー,エルメスコピー,
シャネルコピー,グッチコピー,プラダコピー,ロレックスコピー,カルティエコピー,オメガコピー,
ウブロ コピーなどの世界にプランド商品です。
2006年に弊社が設立された、
弊社は自社製品を世界中に販売して、高品質な製品と優れたアフターサービスで、

# ivermectin oral solution http://stromectolabc.com/
how much does ivermectin cost 2022/02/07 17:54 Busjdhj
ivermectin oral solution http://stromectolabc.com/
how much does ivermectin cost

# stromectol covid 19 http://stromectolabc.com/
stromectol 6 mg tablet 2022/02/08 3:43 Busjdhj
stromectol covid 19 http://stromectolabc.com/
stromectol 6 mg tablet

# stromectol order online http://stromectolabc.com/
ivermectin 3mg tablets price 2022/02/08 10:29 Busjdhj
stromectol order online http://stromectolabc.com/
ivermectin 3mg tablets price

# buy ivermectin pills 2022/02/21 2:25 Stevenfrade
https://stromectolis.com/# buy stromectol canada

# stromectol 3mg 2022/02/21 7:02 Stevenfrade
https://stromectolis.com/# generic ivermectin for humans

# ivermectin price canada 2022/02/21 13:31 Stevenfrade
https://stromectolis.com/# ivermectin drug

# doxycycline https://doxycyline1st.com/
buy cheap doxycycline online 2022/02/25 22:33 Doxycycline
doxycycline https://doxycyline1st.com/
buy cheap doxycycline online

# 100mg doxycycline https://doxycyline1st.com/
doxycycline prices 2022/02/26 9:48 Doxycycline
100mg doxycycline https://doxycyline1st.com/
doxycycline prices

# re: 真偽値を返すメソッドにおいて 2022/08/28 11:51 MC CLIENT CRACK ANARCHY 2b2t
I do, in fact, recommend the site of MC ANARCHY client Cracks 2022, http://www.jafwachat.org/ of which provides 2b2t clients, Pyro Client, Rusherhack, Future, and Many more of these. Of which you should open, the site for many Good clients

# paxlovid buy https://paxlovid.best/
coronavirus treatment 2022/09/07 22:58 Paxlovid
paxlovid buy https://paxlovid.best/
coronavirus treatment

# duwbnaeqeg@nifty.com 2022/11/30 3:06 ルイ ヴィトン メンズ バッグ ショルダー
欲しかった物がお得に買えた上、親切かつ大変丁寧な梱包でとても嬉しく思いました。
機会があれば是非、また利用させていただきたいです。
有難うございました。

Post Feedback

タイトル
名前
Url:
コメント: