美しいソースコードを書くにはどうすればいいと思いますか?

あなたの座右の銘たりうるプログラミング系書籍を示しつつ
「美しいソースコード」について語ってください。
自信作を提示していただいても嬉しいです。
言語問いませんがマークアップ言語以外でお願いします

回答の条件
  • 1人3回まで
  • 登録:2006/03/16 23:29:05
  • 終了:2006/03/23 23:30:02

回答(9件)

id:izayoimizuki No.1

izayoimizuki回答回数302ベストアンサー獲得回数02006/03/17 07:07:20

ポイント15pt

「その場よりも未来を」といったところですね。

実装は手抜きでとりあえずその場限りで通用する実装も出来ますし

未来を考えて多少その場は時間がかかっても拡張性や

メンテナンス性を考えた実装が出来ますから。

手抜きの実装は後々継ぎ接ぎのソースを書き終えざる無くなり

混乱したソースになりますね。


クラス,関数,DLLを多用して目的語とに細かく

切り分けるのも良いですね。

クラス,関数,DLLの命名もゆっくり考えるべきですね。

後々変えられなくなりますから。


後は・・・「規則を変えない」ですね。

規則を変えると確実にソースが混乱し始めますね。

インデントのかけ方やクラス等の命名の規則を変えるだけでも・・・

読み難くなる為にその場限りの対応が増えてしまいますし・・・


インデントや改行をむやみやたらに入れないことでしょうか。

多すぎるインデントはインデントにかかる時間を増大させ

可読性を落としますから・・・

id:paffpaff

インデントをまったく入れない人とかいますね

それで問題ない程度にモジュールが短くて可読性がよいのがいいですよね

ほぼ同じコードが2箇所以上に書かれているのが耐えられません・・・・

2006/03/17 21:26:36
id:ToMmY No.2

ToMmY回答回数656ベストアンサー獲得回数192006/03/17 00:12:38

ポイント15pt

私ができるのはC言語です。

きれいなコードは心がけていますが、かけたことありませんw

どの言語でもよみやすいというのが第一でしょう。

同じような処理をちゃんと関数にし、万人に理解できるようなソースであるのが一番でしょう(抽象的ですいません、一般化して語れることではないとおもうので・・)

C言語系には構造体やクラスがありますから、これをいかにうまく使うかが鍵だと信じています。

しかし書けたことはありません・・・

id:paffpaff

心がけているっていうのはすばらしいですね!

コメントをちゃんといれるのがいいという人もいるのですが

エレガントなソースはコメントがほとんどなくても読みやすいんですよね

2006/03/17 21:39:36
id:Wafer No.3

Wafer回答回数103ベストアンサー獲得回数02006/03/17 01:32:12

ポイント15pt

ライティングソリッドコード―バグのないプログラミングを目指して (マイクロソフトプレスシリーズ)

ライティングソリッドコード―バグのないプログラミングを目指して (マイクロソフトプレスシリーズ)

  • 作者: スティーブ マグワイア
  • 出版社/メーカー: アスキー
  • メディア: 単行本

プログラミング作法

プログラミング作法

  • 作者: ブライアン カーニハン ロブ パイク
  • 出版社/メーカー: アスキー
  • メディア: 単行本

「美しい」の定義が難しいですね。プログラムの「美しさ」は、私は「わかりやすさ」だと考えています。

 私の職場の机には、赤と灰色の二つのゴミ箱を置いています。何の変哲もない、プラスチック製の小さなゴミ箱です。

 すると、優れたプログラマに限って「赤が燃えるゴミ用なの?」と聞いてくれるのです。

 まさにそのとおりなのですが、私はこのことが「美しい」プログラミングの一つの形ではないかと考えているのです。

id:paffpaff

ソースの美しさは「機能美」ですね

2006/03/17 21:45:34
id:F57PB No.4

F57PB回答回数86ベストアンサー獲得回数02006/03/17 00:01:22

ポイント15pt

【書籍】

Effective Java

http://www.amazon.co.jp/exec/obidos/ASIN/4894714361/250-4568...

私の考える美しいソースコードとは、色々ありますが、軽視されがちなところで「命名」がしっかりしていることです。

Javaで言えば、クラス名、フィールド名、メソッド名...しっくりくるネーミングができない場合は、

大抵設計に無理があったり、矛盾していたり、正しく概念を捉えられていない等の問題が

生じていることの症状であることが多いと思います。

適切な命名をされていれば、余計なコメント等がなくてもソースを読みやすいです。

id:paffpaff

名前をつけるのに短縮してつけられると

後からよくわからなかったりします

ローマ字になってる変数名なんてのもありますね

2006/03/17 23:38:43
id:kubira711 No.5

kubira711回答回数132ベストアンサー獲得回数02006/03/17 13:02:14

ポイント15pt

美しいソースを書くためには無駄なコーディングを

避けて極力短く書かなければなりません。

これを実現するコツというのは特にありません。

強いて言えばそのプログラムが解決しようとしている

問題の構造について熟慮してからコーディングすること

くらいでしょうか。

それとXMLと同じように開始したタグは必ず閉じること。

GOTO があってはならないのは勿論、

IF ~

 IF ELSE

  IF ELSE

は好ましくないと言えましょう。

IF ~ 

   ~

ELSE

  IF ~ 

   ~

  ELSE

   ~

  ENDIF

ENDIF

のほうがずっと見やすくて美しいと思います。

id:paffpaff

>開始したタグは必ず閉じる

というのは比喩的な意味ですか?

2006/03/17 23:40:28
id:WANT No.6

WANT回答回数118ベストアンサー獲得回数92006/03/16 23:42:19

ポイント15pt

 一応プログラマーやってますが...

美しいソースコードを書く方法>

 ・インデントをしっかり行う

 ・分かりやすいコメントをつける

 ・GOTOを使わない

 ・可能な限りサブルーチンに分け、メインルーチンには最小限のコードのみ書く

座右の銘たる書籍>

 ・会社の先輩の書いたソースコード

 ・林晴比呂 著 改訂C言語入門

ですかねぇ...

あまり参考にならなくてすみません

id:paffpaff

そのへんは最低限だと思うんですよね

それもやってない人もけっこういたりするのですが

goto使わなければいいとも限らないし・・・

2006/03/17 21:47:32
id:kubira711 No.7

kubira711回答回数132ベストアンサー獲得回数02006/03/17 22:41:41

ポイント15pt

IF ~ 

   ~

ELSE

  IF ~ 

   ~

  ELSE

   ~

  ENDIF

ENDIF

これが美しいプログラムの条件です。

へっ これが?とか思ったらもうダメです。

id:studiokingyo No.8

d金魚回答回数47ベストアンサー獲得回数22006/03/19 03:58:36

ポイント14pt

座右の銘たる書籍

http://www.amazon.co.jp/exec/obidos/ASIN/4774117870/studioki...


http://www.pro.or.jp/~fuji/mybooks/cdiag/

に載っているコードのような形式で書いてはならないと思います。

場合によってはそこに載っている形式を使ってしまうことも今後あるかもしれませんが^^;


C/C++両方に言えることとしては

ハンガリアン記法

http://live.under.jp/todashou/tips/code_writting/notation.ht...

なんてどうでしょう。

私はあまりスキジャナイので使っていないのですが^^;

MicrosoftのWin32APIなんかがこのスタイルだった気がします。


C言語に関してですが、

私はこの内容や自らの経験から自らのコーディングスタイルを確立しました。

  • ifでエラーチェック エラーしたらreturnまたはgotoしてエラーハンドリング形式
  • エラーしたら元の状態に戻す(エラーハンドリング)
  • 元の状態に戻すときはラベルを数個とgotoを何回使っても良い

そのようなコーディングスタイルで書いたライブラリがdkutil_cです。

http://sourceforge.jp/projects/dkingyoutility/


gotoを絶対に使わないというのも試した事がありましたが私には合いませんでしたし、gotoを使った方がきれいに書けると思います。

gotoを使わない場合はforでくくってエラー条件時にbreakみたいな書き方になってしまいますし。

for(;;){

break;

}

みたいな。

それから、assertの使い方にもこだわりがあります。

http://d.hatena.ne.jp/studiokingyo/20050923


また、タブ等でソースコードが見にくい場合は(特にglib)

http://q.hatena.ne.jp/1138106699

のようなツールを使用すると良いと思います。

私はコーディングするときはインデントは癖でしっかりつけてしまうほうですが、別につけないでコーディングしても上記のようなツールを使えば一掃されるのでそこらへんは私は気にしていません。


C++で美しくコーディングするとなると様様なコーディングスタイルやプログラム構造、コンパイラ間の問題等が出てきてとても複雑になるのでここでは割愛させていただきます。(と、いいますか、私もどれが美しいのかは一人で判断できないもので・・・)

私が思うにboostやSTLのようなtemplate形式が良いかMFCのようなvirtualとか抽象クラスとかのような形式が良いかはは判断しかねますし…

id:paffpaff

かなりやっていらっしゃるようですね!

ハンガリアン記法は嫌いですが、チームのコーディング基準で推奨されているので仕方なく使っています

これも人によって(世代によって)微妙に違っていたりします

細かいコーディングの話になるとたしかにそうですね~

悩みますね~

2006/03/20 21:45:35
id:sasyuke No.9

sasyuke回答回数3ベストアンサー獲得回数02006/03/19 10:15:01

ポイント14pt

私はDelphiを使用しています。

やはりソースコードの美しさというのは、可読性がいかに良いか、

さらに、他人が読んですぐにとはいかないまでも、理解してもらえるか、

引き継ぐとなると、短期間に行えるか、などと思います。

 

実際のコードでは、例えば IF 文は、

if ~ then

begin

end

else

begin

end;

 

のようにも書けますし、これを以下のようにも書けます。

if ~ then begin

end else begin

end;

 

下のほうが、まず第一に行数が少ないという点からも、見やすいですし、

ぱっと見ても分かりやすいと思います(好みもありますが・・・)。

また、よく聞くことでは、1つの関数は1画面で全てが見渡せるように

書く、というのもありますね。

 

さらに、変数の命名では、色々な型を、宣言を見なくても済むように

心掛けています。

BYTE ib~

WORD iw~

SINGLE sl~

STRING st~

グローバルな変数なら、g_ib~ など

 

関数の名前も、戻り値に応じて、名前を決めています。

function f_ibGetStartTime: Byte;

function f_stGetUserName: String;

 

こうする事によって、バグもかなり出にくくなりますし、

可読性、開発効率など、色々といい面が多いと思います。

  • id:paffpaff
    自動終了してしまいました

    いきなりがっつり終了してしまうようになったんですね
    迂闊でした

    良回答をお寄せくださった皆様、申し訳ございません
    いるかも設定できませんでした

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません