たまに「じゃんぬねっと」が生存確認をする日記

役員より労働者の方が絶対楽だと思う

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  984  : 記事  4  : コメント  38461  : トラックバック  277

ニュース

My Website

初心者向けのサイトです。

C# と VB.NET の入門サイト

最近のできごと

低学歴の IT エンジニア兼管理職です。ずっとリモートワーク中。

駆け出しはブラック企業で低年収でしたが、転職を繰り返して年収は 5 倍以上になりました。

年収はこれ以上増えても幸せ指数は増えませんので、趣味の時間を増やすため早期の半リタイアを考えています。

最高の配偶者、可愛い娘、ハンサムな息子と幸せな日々を送っています。

息子の将来の夢はゲーム実況者らしい。がんばれー^^。

Sponsored Link1

Sponsored Link2

Archive

書庫

ループ変数に同じ変数を使わないでください... orz

VB 全般 (コーディング ホラー)

    Dim i As Integer

    For i = 0 To obj1.Length - 1
        ' 何かの処理
    Next i

    For i = 0 To obj2.Length - 1
        ' 何かの処理
    Next i

VB2003 以降であれば、同じ名前でもこのようにブロック限定の変数が使えます。

VB2003 以降 (Not コーディング ホラー)

    For i As Integer = 0 To obj1.Length - 1
        ' 何かの処理
    Next i

    For i As Integer = 0 To obj2.Length - 1
        ' 何かの処理
    Next i

VB2002 以前の場合は別の変数を使ってください。

VB2002 以前 (Not コーディング ホラー)

    Dim i As Integer

    For i = 0 To obj1.Length - 1
        ' 何かの処理
    Next i

    Dim j As Integer

    For j = 0 To obj2.Length - 1
        ' 何かの処理
    Next j

コーディング ホラー記事へのリンク

投稿日時 : 2005年11月8日 1:03

コメント

# re: Coding Horror 01 2005/11/08 9:05 りばてぃ
第2弾はいつ公開ですか?w

慣れちゃうと無意識のうちに2番目の書き方になるんですけどね~。
逆に1番目のような書き方に慣れてしまってる人を更正(?)させるのは至難の業かと・・・。

# re: Coding Horror 01 2005/11/08 9:14 福王寺聡明(FP!)
そもそも、カウンタ用変数にも名前付ける努力が必要ですね。たまにi, j, kの意味が不明確になっている痛々しいcodeが orz

# re: Coding Horror 01 2005/11/08 9:20 じゃんぬ
> カウンタ用変数にも名前付ける努力が必要ですね。
> たまにi, j, kの意味が不明確になっている痛々しいcodeが orz

ただのループ カウンタであれば i の方が良いと考えてます。
私は i しか使いません。(j, k, l, m, n なんて数年使っていない)

良い名前をつけない理由は、他の変数の存在が薄くなりがちだからです。
i という名前にすることで、for の先頭だけを把握するだけで済みます。
そもそも、for, foreach って while と違って先頭でどんな繰り返しなのかが集約されていますからね。

(CodeComplete より)

# re: Coding Horror 01 2005/11/08 10:07 福王寺聡明(FP!)
> 良い名前
他の変数の存在が薄くなることもありえますが、私の場合、iが何かを確認するための負荷が高く感じてしまいます。つまり目的が明確にならないと分かりにくいので、簡単な名称付けを行っている事が多いです。ここら辺はなにを主体においてコーディングをするかによって大分違いますね。

> for, foreach って while と違って
ちなみに条件やループを単純化でき、目的が明確になりやすいので、私の書くコードにはforeachが頻度高く登場します。

# re: Coding Horror 01 2005/11/08 10:20 じゃんぬ
> iが何かを確認するための負荷が高く感じてしまいます

臨機応変ではないでしょうか?
要素を取り出すインデックスに名前をつける必要性は感じません。

昔は何でもかんでも名前をつけていましたが...

# re: Coding Horror 01 2005/11/08 11:13 福王寺聡明(FP!)
> 臨機応変ではないでしょうか
もちろん臨機応変に対応しています。名称によって見難くなる場合がありますからね。バランスが大切ですv

# re: Coding Horror 01 2005/11/08 11:19 じゃんぬ
それならば問題ないと思いますよ。

しかし、要素を取り出すのって foreach 推奨ですから、
私の場合は J でしかあり得ないかもしれませんね。(^^)

# re: Coding Horror 01 2005/11/08 11:21 じゃんぬ
>りばてぃさん
すっごいのありますよ。
これ公開しても良いのかなぁってくらいすごいのがw

こっそり、送っておきますねw

# re: Coding Horror 01 2005/11/09 14:22 ぬし
ループ変数に同じ変数を使わないでください... orz

Dim i As Integer

For i = 0 To obj1.Length - 1
' 何かの処理
Next i

For i = 0 To obj2.Length - 1
' 何かの処理
Next i

『ループ変数 = i』
というのは暗黙的なルールだと思いますので、
別にかまわないのでは?
逆にj,kは2重3重ループの時に使う
ループ変数だと勘違いしちゃいそうです。

# re: Coding Horror 01 2005/11/09 14:44 じゃんぬ
> 別にかまわないのでは?

変数の最適化については、この際おいといて、
別の場所で同じ変数を使うと、無関係であることが直感的にわかりません。
今回はたとえが悪かったのですが、これが temp という string の変数であれば、もっと無関係に見えなくなります。

これは某書籍にも書かれている内容です。

> 逆にj,kは2重3重ループの時に使う

これは初めて聞きました。
先にも書いてますが、特別な意味を持つのであれば、それなりの名前をつけます。
二重になれば特別な意味を持つと思います。
たとえば、row とか column とかですね。

二重三重のループでi,j,kなんて使っていたら、それこそわけがわからなくなります。

ところで、「逆にj,kは2重3重ループの時に使う」のソースが見当たらなかったです。
古い名残というソースではなく、「二重三重に使うものだ」というソースが見つからなかったということです。
もう少し探してみます。

# re: Coding Horror 01 2005/11/09 15:17 気になった人
>逆にj,kは2重3重ループの時に使う
>ループ変数だと勘違いしちゃいそうです。
それは絶対にありえないです。入れ子になっているかどうかはネスト見れば一目瞭然です。

どんなブロックであっても、開始から最後まで短く見通しの良い構造にしますよね?
なので・・・入れ子になっているかどうかはすぐわかりますよね?
それが判断できないソースは、その時点でCodingHorror?になりませんかね?
たぶん、そのために使う変数を直前に宣言するんだと思います。

# re: Coding Horror 01 2005/11/09 15:54 ぬし
>ところで、「逆にj,kは2重3重ループの時に使う」のソースが見当たらなかったです。

すいません。これは私の思い込みだったでしょうか・・・(^^;
私は通常、

for( int i = 0; i < ○○○; i++ ) {
for ( int j = 0; j < △△△; j++ ) {
・・・・
}
・・・・
}

ってコーディングしますので。

まぁ、やはりループ変数も単純なものなら「i」で
よいかもしれませんけど、なるべく使用用途が
わかりやすく命名するのが一番ですよNE。

まぁ、ループ変数に限らず、変数の定義は
・できるだけ狭いスコープで定義する。
ってのが大前提だと思います。

# re: Coding Horror 01 2005/11/09 16:21 じゃんぬ
仰られようとしているコトは理解しているつもりです。

まあ、今回は単純なサンプル コードですので...
I-Nteger (i, j, k, l, m, n) という意味しかないですからね。

# re: Coding Horror 01 2005/11/09 23:59 oyama
> 古い名残というソースではなく、「二重三重に使うものだ」というソースが見つからなかったと
> いうことです。
> もう少し探してみます。

普通に行列計算とか、バブルソートみたいなアルゴリズムのソースに
いっぱいありそうです。

# re: Coding Horror 01 2005/11/10 18:05 がるがる
がるです。個人的にはiは割合に多用しちゃってるですが(苦笑
多分、必要に応じて{}あたりで囲うことが多いので(メインはC++。あとはPerlとかそこらへん)、影響範囲という意味で可視性は割合によい……のかもしれないです。

よく使う「局所限定使いまわし変数」は、i,j,k,x,y,tmp,buf,wk,cwk,pwk,とかって感じですかねぇ。
ほかの変数名は割合にちゃんと(和英&英和辞書引いてちゃんと英語表記で(笑))名前をつけて、露骨に差別化するようにしてます(笑

あと。軽く突っ込みを。
oyamaさん
> 普通に行列計算とか、バブルソートみたいなアルゴリズムのソースに

多分じゃんぬさんの
> ところで、「逆にj,kは2重3重ループの時に使う」のソースが見当たらなかったです。
> 古い名残というソースではなく、「二重三重に使うものだ」というソースが見つからなかったということです。
という発言は
「jklあたりがプログラムソース中に記述されているもの、ではなくて、二重三重のループにはjklを使うべし、と文章でなにか書かれているもの(情報元という意味合いにおけるソース)が見つからなかった」っていう意味合いのような。
…違うですか? > じゃんぬさん

ちなみに情報元のほうは、おいらも把握してません(笑

# re: Coding Horror 01 2005/11/10 22:06 oyama
なるほど、そういうことですか。

確かに昔のFortranやBASICの本でも当たり前に使われていたような気がしますね。
BASICの本では「Fortranではこうします」と書かれていた気はしますが。

現代ではナンセンスですが、昔は変数名に2文字しか使えない処理系なんてのもありましたし、インタプリタの時代には変数名が長くなると遅くなるという制約がありましたしね。

こんな時代には(少なくとも僕が読んでいた本、雑誌の範囲では)ループ変数はi、j、kの順に使っていくという暗黙の了解はあったような気がします。
これにも外側からiを使う人と内側から使う人がいたり……(爆死)

#TextPackerなんて知ってる人、います?

# re: Coding Horror 01 2005/11/11 0:56 じゃんぬ
>がるさん
> 二重三重のループにはjklを使うべし、
> と文章でなにか書かれているものが見つからなかった
> っていう意味合いのような。

はい、そういう意味で言いました。(^^;)

>oyama さん
ポケコン BASIC では、変数名は 2 文字でした...
いや、困りましたよ... orz

# re: Coding Horror 01 2005/11/11 15:05 がるがる
まぁポケコンBASICで変数二文字なんて、なんて贅沢な(笑
おいらが高校で買わされたポケコンは1文字でした :-P
おかげで、授業中にゲームプログラム組む設計で、よくアルファベット26文字ならべて変数表作ってたものです。

よく「このGOSUB内ではXX、このGOSUB内ではXX」っていう書き方をしてましたねぇ。


# re: Coding Horror 01 2005/11/11 18:45 enzo
おろっ? VB2002でブロック変数って使えたのでしたっけ?(^^;


# re: Coding Horror 01 2005/11/13 13:23 じゃんぬ
あれ? 2003 からでしたっけ?
2002 時代は触っていないのでわかりません...

# re: 使い捨て変数/ Loop変数 の名称 2006/07/19 0:16 Ognacの雑感
re: 使い捨て変数/ Loop変数 の名称

# PCggHJmgiw 2021/07/03 3:30 https://amzn.to/365xyVY
Pretty! This has been a really wonderful post. Many thanks for supplying this information.

# Test, just a test 2022/12/13 3:40 candipharm com
canadian generic pills http://candipharm.com

Post Feedback

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