2009-08-09

http://anond.hatelabo.jp/20090808190412

ところが今回はカウンタ変数引数に入れてメソッドを呼び出している。

そうなると、メソッド呼び出し先で、仮引数メモリを毎回確保することになるので、

カウンタ変数を共通にするのは意味がない。

メモリを毎回確保することは確かだけど、それとカウンタ共通化とのつながりがわからない。

ケース1はなんか言語特性の違いなのかという気がしてきた。

C言語からはじめてJava中途半端にかじった後、C++メインに以降しつつあるへっぽこプログラマです。

私の書くコードの可読性が低いのは確かだろうなと思う。

プログラムのあるべき論として、ヘンな箇所でアクセスされて不良を作らないように

変数寿命をなるべく短くなるようにする原則があることは知っている。

ただ、C/C++ポインタというものが存在してメモリ解放とか明示的に行う。

またC/C++プログラマは大きなメモリ解放/再確保がかなり性能コストがかかることをしっている。

それなので、C/C++だと一度確保した大規模領域を解放/再確保しないように

本来の変数寿命より、長めに扱えるように設計することがある。

そんな変な寿命変数は不良の温床であり、可読性が低いことは理解しつつも。

さらにいうとC言語では関数の先頭で変数宣言して、

メソッド抜けるときは関数ローカル変数はすべて領域を解放するようにコーディングするもんじゃないっけ

そんな怪しいことをやるプログラマなんで、

関数ローカル変数の、

しかもほぼ配列インデックスにしか使わないiなら使いまわせばいいじゃんと思うのです。

記事への反応 -
  • あれは私がまだ大学助手をしていたころだから3年ほど前のことだと思う。 私の勤めていた大学(情報系)では「プログラミング研究会」みたいなサークル活動が行われていて プログラ...

    • ケース1のどこが悪いかわからない。 変数iのスコープを適切にして、 変な箇所でiにアクセスさせて不良を発生させるリスクを減らせって話? 私がメインはC++のコーディングするから...

      • こういう人が書いたプログラムは保守性悪いだろうな・・・ ケース1で問題なのは、for文内で行っている処理が引数付きのメソッド呼び出しであること。 引数のないメソッドや、単純な...

        • ところが今回はカウンタ変数を引数に入れてメソッドを呼び出している。 そうなると、メソッド呼び出し先で、仮引数のメモリを毎回確保することになるので、 カウンタ変数を共通...

          • C/C++ならば、ループカウンタにローカル変数を使えば、最適化されることは分かってるから保守性重視で書く。 真面目なコンパイラなら1はどっちを書いても同じようなコードになるさ。 ...

            • 真面目なコンパイラなら1はどっちを書いても同じようなコードになるさ。 同じようなコードというのはコンパイラが吐き出すアセンブラコードの話?? 真面目なコンパイラなら修正...

              • レジスタの多いCPUの場合で、単純なループが最適化されるとループカウンタはレジスタ上に確保される。 ローカル変数の場合。全てのコンパイラを知ってる訳じゃないから、全部そうな...

                • なるほどコンパイラで同じアセンブラコードはかれるんですね。 じゃ、変数のスコープ短く保つべきですね。

                  • http://anond.hatelabo.jp/20090809221610 最初の文と次の文が全然つながってない気がする 吐かれるコードが一緒なのに、じゃ、の意味が分からない…

            • まー、こんな所をチマチマこだわっても、全体は良くならん。 こまけーこたぁいいんだよ!!(AA略 そこは同意。 ただ大元の増田の投稿で「退行」って騒いでいるから、そんな騒ぐほ...

            • Cから入った中途半端なC++プログラマでオブジェクト指向の理解イマイチだからかもしれないけど、私はこんなコードをよく書く。 ObjA *a = NULL; ObjB *b = NULL; int rc = RC_SUCCESS; a = createA();...

        • といったってたかが4バイトじゃないか。 ここで問題になるようなバイト数か?

        • メソッド呼び出しは、どちらの書き方でもスタックにiがプッシュされるだけでは? もしかして特殊な環境の話?

        • にやにや

      • 実際に稼げてるか分からないメモリのために、変数の寿命を短く保つというルールを曲げるのは、割が合うかどうかって話じゃないの? 「変数の寿命を短く保つ」という基本的なルール...

    • これマジ? 俺、未経験(もちろん非情報系専攻)で業界に入ってプログラミングやることになって1年くらい経つ。 その間の学習の軌跡はだいたいこんなもん。 とりあえずK&Rを読ま...

      • 26歳から職業プログラマーやってるが。 前職は文系職だし、学生時代にCとかFortranでゴミみたいな設計(ていうか設計ってなに?食えるの?みたいなレベル)の数値計算プログラムを書いた...

    • 文章から判断するに、その彼女は、 「創造」と「演繹」の能力に比べて 「分析」と「帰納」が優位だから、 先に理論を説明するより、 良い例、悪い例を見せてから、やらせてみて、 そ...

    • あれは私がまだ大学助手をしていたころだから5年ほど前のことだと思う。 私の勤めていた大学(情報系)では「SEX研究会」みたいなサークル活動が行われていて SEXの講義を受け持ってい...

      • http://anond.hatelabo.jp/20090807204140 C++は中高生のセックスに似ている。何故ならば。。。 みんな、そればっかり考えている みんな、その話ばかりしている みんな、他の人もやっていると...

    • プログラムは論理だけじゃない著作物ってことですね。 コンピューターのためだけでなく、人間にもわかりやすい記述が必要。 しかし、それは論理だけではなく経験も必要ということか...

    • 長文の割に内容なさ過ぎ。別に難しい用語を使ってるわけでもないのにこういうのがかけるのも才能なのかもしれん。何が正しい方向かが全然明示されないからその逆行現象というのも...

    • お前中卒だろ?

    • 現役中学生の間違いでは。

    • あれは私がまだ大学助手をしていたころだから3年ほど前のことだと思う。 過去形で書いてあるのはクビになったからだろうか。

    • 正直、ケース1は大した問題ではない。 そりゃ、スコープの理解がきちんとしているのに越したことはないけど。 この程度でウダウダ言うぐらいなら後置インクリメントを改めるべき...

      • 後置きインクリメントってi++のことだよな? それが++iの方に改めろって言ってるんだよな? どして? 評価順が換わるのは分かるが、このケースでは処理結果に影響ないじゃん。i++だと...

      • http://d.hatena.ne.jp/cubicdaiya/20080606/1212695409

        • 作法ではないな。内部処理的な問題。 http://anond.hatelabo.jp/20090809204059がよい解説のリンクを張ってくれたので見るといい。 簡単に言えば後置インクリメントは処理の内部で必ず一時的な...

    • Google Docsはグローバル変数を使う、定石とは逆の実装 | エンタープライズ | マイコミジャーナル http://journal.mycom.co.jp/news/2009/08/11/020/index.html

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん