- ベストアンサー
定数等のオンコーディングについて
いつもお世話になっております。 コーディングする時の注意点についてお聞きしたい事があります。 よく、「数字や文字列をそのままPGにオンコーディングせずに、 定数として定義してから使うように」と言われます。 なぜそうなのでしょうか? 以下の2つの観点から教えて頂けませんでしょうか? (1)数字や文字列など、定数にして使うことの利点 (2)何を定数にして、何を定数にせずそのまま使うのがよいのか 宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
私もその点いろいろ考えたことはありますが。 つまるところこうだと思います。 [前提] 商売用途の簡潔なソースを書くことを目的とする。 難解なソースを書くと、解読に余計に一時間かかりまして、 保守に一時間あたり1000円以上/hrs・人の人件費を損なうとする。 (1)定数の利点は「マジックナンバー」を防ぐことです。 マジックナンバーとは、その数値自身が意味を持たないことです。 もし、Ifの分岐として 「もし、患者が男なら処理Aを、女性なら処理Bを」という分岐が あったとします。 ここの書き方は幾つかありますが、最低なのは。 if (X == 0){ 処理B } Else{ 処理A } この構文は最低です。 何故なら、もし上記のようにコメント行を書かないと変数Xが何か、 0の意味は?1の意味は?何が何だかわからなくなります。 こういう… // X は人をし、0=女性、1=男性を指す コメント行がないと意味が判りません。 大きいプログラムになると何千行も読まないと意味が判りません。 ただ、ここを定数とすると。 if (patient == female){ 処理B } Else{ 処理A } コメントが無くても、何となくすぐに判ります。 気づきませんか? そうです。構文がそのまま人間語に近いと判りやすいんですね。 ですので、 i = 0 とか、strOK == 6 とかよく判らないことを書くよりも。 inifile.exist == false とか、human.sex == MEN とか。 わかりやすく書くと、製作費が「安価」になりますので儲かります。 オブジェクト指向等の考えはつまるところ、人間語に近い プログラムを書く手法を指します。 個人的には汚いコード10万行以上書いた場合、コードの大まかな 流れを理解するのはほぼ不可能になる思います。 逆にきれいに書くと、何とかなると思います。 (2)定数にする部分は、主に大まかな仕様の部分。 人間語にしやすい、全体の仕様の流れを指し示すおおまかな ところは全部でしょう。 クラス名をキッチリつけ、変数名をキッチリつけ。 仕様が「もし、彼がリンゴをみつけたら」ということであれば int APPLE = 1; if (he.find(APPLE) == true) というように近い形のコードを書けるように、クラス名や 変数、メソッド、定数を書くべきだと思います。 判りやすいと儲かります(笑)
その他の回答 (2)
- koko_u_
- ベストアンサー率18% (459/2509)
>どんな意味なのでしょうか? マジックナンバーのことじゃない? 単純に for ループで for ( i = 0 ; i < 10 ; i++ ) { ... } と書いてあると、「10」が何を意味しているのかわからなくなる。 これを const int stack_size = 10; などと定義して for ( i = 0 ; i < stack_size ; i++ ) { ... } と書けと。 基本的には 0 などのそれ自体で意味が明確なもの以外、マジックナンバーは使わない。 プログラム規模が大きくなって、メンテナンスする際に余裕で死にます。
お礼
ご返信ありがとうございます。 規模が大きくなればなるほど、そのように書いていたら大変に なるのですよね。やはり保守や拡張なども考えてやらねばなりませんね。 ありがとうございました。
- sakusaker7
- ベストアンサー率62% (800/1280)
オンコーディングという言葉は初めて聞いたのですが どんな意味なのでしょうか? define: oncoding - Google 検索 http://www.google.com/search?sourceid=mozclient&ie=utf-8&oe=utf-8&q=define%3A+oncoding
お礼
ご返信ありがとうございます。 「人間語に近いと判りやすい」ということなのですね。 確かにコーディングは、動くように書けばどのように書いても 動きますよね。それをわかりやすくするために不明なものをなくす ようにしなければならないのですよね。 ありがとうございました。すっきりしました。