アカウント名:
パスワード:
一度しか通らない道だから実行結果に問題はないんだけど、コードの途中に突然変数の宣言が現れてその変数を一時的に使ってたりとかなら・・・。あとプロシージャの中でGotoとGosubとか日常的に使いまくりだったりとか・・・。
でもちゃんと動くからいいじゃない。人に見せるわけでもないしいいよね。どうせ見るのは自分だし・・・。的な思いからそのままになってます。
コードの途中に突然変数の宣言が現れてその変数を一時的に使ってたりとかなら・・・。
え、これってダメなの?使う場所の近くで宣言する方がいいって思ってるんですが。
言語にもよるけど変数のスコープは小さければ小さいほどいい。javaで言えばfor(int i=1 ; i < MAX ; i++ ){ // ナニかの処理}みたいなのは推奨されてる。(この場合のループカウンタはfor文の中だけで有効)
ただ、たかだが50行~100行程度のメソッドで、スコープが得に小さくなるわけでもないのに宣言だけあちこちに乱立するくらいなら、メソッドの先頭にまとめちゃうのも一つの手だとは思う。
これが50~100行程度のメソッドで、他の変数が全部先頭にまとめられているのに、あとで書き足した初心者プログラマーが変数宣言を途中に追加したら、他の理由がない限り先頭に入れるように書き直せと指示すると思う。
> for(int i=1 ; i < MAX ; i++ ){これって
for(int i = 0; i < MAX; i++) {
か
for(int i = 1; i < MAX + 1; i++) {
ではないですか?
変数のスコープをなるべく小さくするのは、初期化忘れの防止が1つの動機ですが不適当な値での初期化に気づかせる効果もあります。
あと
for (int i = 0; i < LONG_MAX; i++) {
であったら、i は int ではなく long である必要があることに気づくので、変数の型が妥当かに気づく機会も与えています。
・・・オレは釣られたのか?
> for(int i = 0; i < MAX; i++) {> for(int i = 1; i < MAX + 1; i++) {>ではないですか?
for文的にはfor(int i = 10 ; i < MAX-2 ; i += 2 ) {とかもありですよ。あんまり使わないかもしれないけど。配列のアクセスなら 0~N-1 が圧倒的に多いだけ。
>変数のスコープをなるべく小さくするのは、初期化忘れの防止が1つの動機ですがそれだけでしたら、(この例においては) for文を使って左側で初期値を設定すれば十分です。そこで変数宣言する必要はありません。
一般的な32bit環境ではintとlongのサイズは共に32bitなのでintからlongに変える必要が生じたとしたら
・intが16bitの組み込みマイコンと格闘していた・longが64bitの64bitプロセッサと格闘していた・相当変態的なABIを採用する32bitマシンと格闘していた
のうちのどれかでしょう。2つ目は根本的に仕様を見直した方がよさそうですが、1つ目なら割とよくある話だと思います。
つられたというか、前提条件がないのでどうでも良い部分。普通なら OK とも NG とも言えない。
あとfor (int i = 0; i < LONG_MAX; i++) {であったら、i は int ではなく long である必要があることに気づくので、変数の型が妥当かに気づく機会も与えています。
今時のコンパイラならふつーに警告出るでしょ。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
私はプログラマです。1040 formに私の職業としてそう書いています -- Ken Thompson
VBだけど (スコア:0)
一度しか通らない道だから実行結果に問題はないんだけど、
コードの途中に突然変数の宣言が現れてその変数を一時的に使ってたりとかなら・・・。
あとプロシージャの中でGotoとGosubとか日常的に使いまくりだったりとか・・・。
でもちゃんと動くからいいじゃない。
人に見せるわけでもないしいいよね。
どうせ見るのは自分だし・・・。
的な思いからそのままになってます。
Re: (スコア:1)
コードの途中に突然変数の宣言が現れてその変数を一時的に使ってたりとかなら・・・。
え、これってダメなの?
使う場所の近くで宣言する方がいいって思ってるんですが。
Re:VBだけど (スコア:2, すばらしい洞察)
言語にもよるけど変数のスコープは小さければ小さいほどいい。javaで言えば
for(int i=1 ; i < MAX ; i++ ){
// ナニかの処理
}
みたいなのは推奨されてる。(この場合のループカウンタはfor文の中だけで有効)
ただ、たかだが50行~100行程度のメソッドで、スコープが得に小さくなるわけでも
ないのに宣言だけあちこちに乱立するくらいなら、メソッドの先頭にまとめちゃう
のも一つの手だとは思う。
これが50~100行程度のメソッドで、他の変数が全部先頭にまとめられているのに、
あとで書き足した初心者プログラマーが変数宣言を途中に追加したら、他の理由がない
限り先頭に入れるように書き直せと指示すると思う。
Re:VBだけど (スコア:2)
> for(int i=1 ; i < MAX ; i++ ){
これって
か
ではないですか?
変数のスコープをなるべく小さくするのは、初期化忘れの防止が1つの動機ですが
不適当な値での初期化に気づかせる効果もあります。
あと
であったら、i は int ではなく long である必要があることに気づくので、
変数の型が妥当かに気づく機会も与えています。
・・・オレは釣られたのか?
Re: (スコア:0)
> for(int i = 0; i < MAX; i++) {
> for(int i = 1; i < MAX + 1; i++) {
>ではないですか?
for文的には
for(int i = 10 ; i < MAX-2 ; i += 2 ) {
とかもありですよ。あんまり使わないかもしれないけど。
配列のアクセスなら 0~N-1 が圧倒的に多いだけ。
>変数のスコープをなるべく小さくするのは、初期化忘れの防止が1つの動機ですが
それだけでしたら、(この例においては) for文を使って左側で初期値を設定すれば十分です。
そこで変数宣言する必要はありません。
Re: (スコア:0)
>> 変数のスコープをなるべく小さくするのは、初期化忘れの防止が1つの動機ですが
> それだけでしたら、(この例においては) for文を使って左側で初期値を設定すれば十分です。
> そこで変数宣言する必要はありません。
おっしゃる通りなのですが、自分は、
・初期化が必要な変数は、極力宣言と同時に初期化する。
というのも初期化忘れ防止の一つとしています。
とすると、そこで変数宣言する必要がでてくるんではないかと思います。
如何でしょうか?
Re: (スコア:0)
>
> であったら、i は int ではなく long である必要があることに気づくので、
> 変数の型が妥当かに気づく機会も与えています。
その前に本当に LONG_MAX(約20億?)回の繰り返し処理が必要なのか問い詰めたい。
Re: (スコア:0)
一般的な32bit環境ではintとlongのサイズは共に32bitなので
intからlongに変える必要が生じたとしたら
・intが16bitの組み込みマイコンと格闘していた
・longが64bitの64bitプロセッサと格闘していた
・
相当変態的なABIを採用する32bitマシンと格闘していたのうちのどれかでしょう。
2つ目は根本的に仕様を見直した方がよさそうですが、
1つ目なら割とよくある話だと思います。
Re: (スコア:0)
つられたというか、前提条件がないのでどうでも良い部分。
普通なら OK とも NG とも言えない。
Re: (スコア:0)
今時のコンパイラならふつーに警告出るでしょ。