- PR -

最小値〜最大値内かのチェック

投稿者投稿内容
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2004-01-29 10:18
NAL-6295

引用:

なちゃさんの書き込み (2004-01-29 10:13) より:
ちょろっとだけ。
引用:

Jittaさんの書き込み (2004-01-29 09:26) より:
 VB.NETでは、それぞれ「ByVal」、「ByRef」修飾子を使います。デフォルトは「ByVal」です。・・・これでTextBox3に、直接表示させられますね?


TextBox3.Textはプロパティなので、参照渡しで反映は出来ないんではないかなという気がします。
# 自動的にプロパティのSetを呼んでくれるんなら出来るかもしれませんが、
# 多分無理なんではないかなと…



参照渡しならば、反映されます。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-01-29 10:54
引用:

NAL-6295さんの書き込み (2004-01-29 10:18) より:
参照渡しならば、反映されます。


ほんとだ…
間違ったこと書いちゃいました、ごめんなさい。

> # 自動的にプロパティのSetを呼んでくれるんなら出来るかもしれませんが、
って書いたけど、ほんとにそのままやってくれてますね…
C# とはこんなところも違うのか…
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2004-01-29 11:01
引用:

なちゃさんの書き込み (2004-01-29 10:54) より:

> # 自動的にプロパティのSetを呼んでくれるんなら出来るかもしれませんが、
って書いたけど、ほんとにそのままやってくれてますね…
C# とはこんなところも違うのか…



C#だと、プロパティ、インデクサの参照渡し(refキーワード)は、そもそもコンパイルできないのですね。
勉強になりました。
ほむら
ぬし
会議室デビュー日: 2003/02/28
投稿数: 583
お住まい・勤務地: 東京都
投稿日時: 2004-01-29 11:18
ども、ほむらです。
-----------
Jitta氏へ
引用:

> bool_rtn = Checkminmax(TextBox1.Text, 0, 100, TextBox3.Text)
 なおしましたね!
 でも、「TextBox3.Text」は、なぜ引数として渡しているのでしょう?


もしかして、近くにC++なプログラマがいたりするんでしょうか?
Cの場合だと関数の戻り値はBOOLであることが理想となっていたりしますね。
んで詳細なエラーの状況は別のところに保存するみたいな。
この書き方にはそれなりの利点もありますね。

引用:

> '最小値が最大値より大きい時はNG
> If in_int_min >= in_int_max Then
> str_errmsg = Err_1 'エラーメッセージ
> Exit Function
> End If
 「最小値」と「最大値」の大小関係を調べることは、この関数の「目的」、「入力が数値で、かつ最小値〜最大値の範囲内にあるか」と関係ないですよね。こういう場合は「エラー」ではなく「例外」なのですが、、、説明はパス。


もう一点。コメントを書いた意味がなくなってしまっていますね。
欲を言えばコードを見れば、エラーメッセージを入れているのはわかるということで
ここでのコメントはエラーの意味を書いたほうが良いのかも(個人論
たとえば。最大/最小が逆のためエラーとか。
その前に判定の内容が書いてあるので必要ないっちゃ必要ないのですが。。。

それと、この部分はあとでリファクタリングしても良いかもしれませんね。
例外については、C++系の人ならばなじみがないのかも
C++では例外は出してはいけないことになっているはずですから。
例外になりえるものは事前に、はじくみたいな。。。
Javaがはやったせいであまり認識されていませんが
例外って所詮は暗黙的エラー処理なのですよね。(便利だけど^^;;

引用:

 このツッコミはあくまで「プログラムの保守」に関することです。関数の看板に書いてあることと、実際にやっていることが違うため、保守する人がとまどう、ということです。


ですね。
ソースは修正したけどコメントはほとんど修正していないような感じもしますね。
コメントはソースコードいっしょに修正していかないと帰って邪魔なものになりますよ。
たとえばこの辺。引数の数が合っていないし
コメントと実際の記述一致してしませんよね。
コード:
'************************************************************ 
'関数名 :Checkminmax 
'機能概要 :最小値〜最大値チェック 
'引数   :in_str_chkstr…チェック対象文字列 
'戻り値  :True/False 
'作成日 :2004/01/1x 
'作成者 : 
'備考 :チェック対象文字列かどうか判断した上で、 
'  最小〜最大値内かチェックする。 
'  チェックでFalseになった物はエラーメッセージを返す 
'履歴 : 
'************************************************************ 
Public Function Checkminmax( _ 
 ByVal in_str_chkstr As String, _ 
 ByVal in_int_min As Integer, _ 
 ByVal in_int_max As Integer, _ 
 ByVal out_str_Errmsg As String _ 
) As Boolean 



引用:

> If in_int_min > in_str_chkstr Or in_str_chkstr > in_int_max Then
 「暗黙の型変換」を使いましたね。「in_int_min」、「in_int_max」はそれぞれ整数型、「in_str_chkstr」は文字列型なので、本来ならチェックできません。ほむらさんの『エラーが出そう』は、そういうことです、たぶん(ついでに、"5", 5, 100はFalseですよ。「より大きく、より小さい」ですから)。
う結果になることを避けるため、明示的に整数型に変換して使いましょう。


さすがVB(笑
型宣言していても「暗黙の型変換」ってのが有効なのですか。。。。
僕が指摘したかったのはJitta氏言うとおりです。
んでエラーがでいないのなら0にでもなっているのかな〜なんて思ってみたりして。

ちなみに、僕がいうtrueというのは関数としての戻り値です。
論理式の結果はfalseですね。
#ちょっとあいまいなこと書いてしまいました。

>明示的に整数型に変換して使いましょう。
*明示的に*というのはなれたとしても重要なことですよね。
可読性にもつながるので習慣付けて置いて損は無いと思います
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-01-29 12:07
引用:

ほむらさんの書き込み (2004-01-29 11:18) より:

さすがVB(笑
型宣言していても「暗黙の型変換」ってのが有効なのですか。。。。


 Option Strict Off であれば、可能な限り解釈しようとしてくれます。(デフォルト)
 Option Strict On であれば、コンパイル(入力時)エラーになります。


> ちなみに、僕がいうtrueというのは関数としての戻り値です。
> 論理式の結果はfalseですね。

 にょ?・・・失礼!「以上以下」ですね。判別式を「より大きく、より小さい」と読み誤っていました!!
 で、思い出したのですが、不等号の向きに関するガイドラインが、『プログラミング作法』にあったと思うのですが、手元にない...

スキルアップ/キャリアアップ(JOB@IT)