パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

OpenSSLのコードの汚さに「サルが書いたコードだ」との批判 」記事へのコメント

  • by Anonymous Coward

    一度しか通らない道だから実行結果に問題はないんだけど、
    コードの途中に突然変数の宣言が現れてその変数を一時的に使ってたりとかなら・・・。
    あとプロシージャの中でGotoとGosubとか日常的に使いまくりだったりとか・・・。

    でもちゃんと動くからいいじゃない。
    人に見せるわけでもないしいいよね。
    どうせ見るのは自分だし・・・。
    的な思いからそのままになってます。

    • コードの途中に突然変数の宣言が現れてその変数を一時的に使ってたりとかなら・・・。

      え、これってダメなの?
      使う場所の近くで宣言する方がいいって思ってるんですが。

      • Re:VBだけど (スコア:2, すばらしい洞察)

        by firewheel (31280) on 2009年11月05日 19時14分 (#1666314)

        言語にもよるけど変数のスコープは小さければ小さいほどいい。javaで言えば
        for(int i=1 ; i < MAX ; i++ ){
            // ナニかの処理
        }
        みたいなのは推奨されてる。(この場合のループカウンタはfor文の中だけで有効)

        ただ、たかだが50行~100行程度のメソッドで、スコープが得に小さくなるわけでも
        ないのに宣言だけあちこちに乱立するくらいなら、メソッドの先頭にまとめちゃう
        のも一つの手だとは思う。

        これが50~100行程度のメソッドで、他の変数が全部先頭にまとめられているのに、
        あとで書き足した初心者プログラマーが変数宣言を途中に追加したら、他の理由がない
        限り先頭に入れるように書き直せと指示すると思う。

        親コメント
        • by ef (25263) on 2009年11月06日 7時32分 (#1666707)

          > 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 である必要があることに気づくので、
          変数の型が妥当かに気づく機会も与えています。

          ・・・オレは釣られたのか?

          親コメント
          • by Anonymous Coward

            > 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文を使って左側で初期値を設定すれば十分です。
            そこで変数宣言する必要はありません。

            • by Anonymous Coward
              別ACなのですが...

              >> 変数のスコープをなるべく小さくするのは、初期化忘れの防止が1つの動機ですが
              > それだけでしたら、(この例においては) for文を使って左側で初期値を設定すれば十分です。
              > そこで変数宣言する必要はありません。

              おっしゃる通りなのですが、自分は、

              ・初期化が必要な変数は、極力宣言と同時に初期化する。

              というのも初期化忘れ防止の一つとしています。
              とすると、そこで変数宣言する必要がでてくるんではないかと思います。
              如何でしょうか?
          • by Anonymous Coward
            > for (int i = 0; i < LONG_MAX; i++) {
            >
            > であったら、i は int ではなく long である必要があることに気づくので、
            > 変数の型が妥当かに気づく機会も与えています。

            その前に本当に LONG_MAX(約20億?)回の繰り返し処理が必要なのか問い詰めたい。
            • by Anonymous Coward

              一般的な32bit環境ではintとlongのサイズは共に32bitなので
              intからlongに変える必要が生じたとしたら

              ・intが16bitの組み込みマイコンと格闘していた
              ・longが64bitの64bitプロセッサと格闘していた
              相当変態的なABIを採用する32bitマシンと格闘していた

              のうちのどれかでしょう。
              2つ目は根本的に仕様を見直した方がよさそうですが、
              1つ目なら割とよくある話だと思います。

          • by Anonymous Coward

            つられたというか、前提条件がないのでどうでも良い部分。
            普通なら OK とも NG とも言えない。

          • by Anonymous Coward

            あと

            for (int i = 0; i < LONG_MAX; i++) {

            であったら、i は int ではなく long である必要があることに気づくので、
            変数の型が妥当かに気づく機会も与えています。

            今時のコンパイラならふつーに警告出るでしょ。

あと、僕は馬鹿なことをするのは嫌いですよ (わざとやるとき以外は)。-- Larry Wall

処理中...