- - PR -
変数の宣言の場所について教えてください。
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-10-25 21:33
mio様
じゃんぬねっと様 かつのり様 宣伝中止!様 たくさんのご解答ありがとうございます。 {}を単体で使えることを知らなかったので驚きました。 { int j = 0; } このような書き方は初めてみました。 同じような処理をする変数を何個も使うときに名前を変えなく ても{}で囲んでしまえば同じ名前でいけちゃうんですね。 宣言とは少し話しが違うと思うのですが、メソッドの処理の中 で別のメソッドを呼び出す際に必要な引数を呼び出し元のメソ ッドの引数で同じ名前で定義するのは読みにくいでしょうか? かなりわかりづらいかと思うのですがすいません。イメージ的 には次のような感じなのですが。。 public void hoge(String arg1,String arg2,String arg3) { ・・・・・ ・・・・・ ・・・・・ int a = hogehoge(arg1,arg2,arg3); ・・・・・ ・・・・・ ・・・・・ } private int hogehoge(String arg1,String arg2,String arg3) { ・・・・・ ・・・・・ String str1 = hogehogehoge(arg1,arg2); String str2 = hogehogehogehoge(arg3); ・・・・・ int result = ○○○; return result; } private String hogehogehoge(String arg1,String arg2) { ・・・・・ ・・・・・ String result = "○○○"; return result; } private String hogehogehogehoge(String arg3) { ・・・・・ ・・・・・ String result = "○○○"; return result; } | ||||||||
|
投稿日時: 2005-10-25 21:40
仮引数と実引数の名前が同じで問題ないか、ということですね。まったく問題ないというか、 よくあることです。 | ||||||||
|
投稿日時: 2005-10-25 23:47
横レスすみません。
Cユーザにしてみれば、JavaやC++で記述できる メソッド途中の変数宣言は、かえって分かりづらいです。 データ入れ替え用や計算用の作業データ、forループやカウントに 使用しているものは除きますけど。。 ↓こういう感じのあちゃーなコードを職場でよく遭遇します。 // 変更前 sample() { subA(); int a = get(); int b = subB( a ); subC( b ); } // 変更後1 sample() { // 変数定義しなおし(汗) int a = get(); subD( a ); subA(); // 上部に定義しなおした為、コメントアウト(汗) //int a = get(); int b = subB( a ); subC( b ); } | ||||||||
|
投稿日時: 2005-10-26 00:03
んん? コード の可読性とかの話もあがっているようですが、変数がどこに 属するべきかという視点で見ることが大事です。 かつのりさんの書き込み内容が本質を捕らえていると思いますので、 フィールド などのキーワードを元に掘り下げて行くことをお薦めします。 | ||||||||
|
投稿日時: 2005-10-26 08:56
初めは私もそうでした。
私は、見かけたことがないッス。 この手のものはいちいちコメントで残したりしません。 (VSS の差分管理になってます) 「ブロック先頭で」という規約もよく耳にします。 ブロックの先頭でまとめてならば、この問題は起きないでしょうね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2005-10-26 13:13
私は、switch-case文を使う際はできるだけ各caseに{}を付けるようにしています。 文法上、case文には{}は要らないので、各caseで変数を共有することができますが、そうしてしまうとswitch-case文に慣れていない人はスコープを見誤ることがあるためです。 変数を共有したい場合は、switch文の前に宣言しています。 これも{}単体の使い方の一つだと思います。 ※逆に慣れた人からすると煩わしいのかな。私の周りでは結構評判良いのですが。 | ||||||||
|
投稿日時: 2005-10-26 14:51
基本的にはそのとおりなのですが、メソッドの外に{}ブロックを作成すると『インスタンスイニシャライザ』という別の意味を持つブロックになるので注意してくださいね。 | ||||||||
|
投稿日時: 2005-10-26 15:02
>私は、switch-case文を使う際はできるだけ各caseに{}を付けるようにしています。
私は、switchの場合は、全部switchの前に宣言ですね。 switchがifの変形であることを考えれば、各caseへの{}でも良いとは思いますが、 なんーとなく違和感あります。個人的には。 |