• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:美しいコードって?)

美しいコードって?

このQ&Aのポイント
  • 多分クラスでも一番オーソドックス、悪く言えば教科書通りすぎて長い解答をしたと思いますが、教授からもうちょっと工夫して美しいコードを書くように言われました。
  • 美しいコードは余分なものがなく簡潔なものを指しますが、具体的な工夫の仕方がわかりません。初心者クラスの友人の解答もあまり差はありませんでした。
  • きれいなコードを書くためのアドバイスを頂けたら嬉しいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.2

原則的に、下記の様な点が満たされているものが美しいコードと言えるかと思います。 1. 理解し易い。 2. 重複が無い。 3. 量が少ない。 これを達成するためには下記の様なプラクティスなどが考えられます。 ・改行・インデントを読みやすく一貫したものにする。 ・関数・変数・クラスなどの名前は、意味が分かるものにする。意味が曖昧にならない範囲で短くする。 ・無駄に変数を使用しない。使わないと出来ない場合や使った方が分かり易い場合だけ使う。 ・変数やオブジェクトは出来る限り不変にする。 これらは、広く普及しているベストプラクティスのごく一部です。 このような良いコードを書く話題を扱った書籍はいろいろと有りますので、参考になりそうなものを挙げておきます。 お勧めの順番に並べましたが、読みやすくて安いという意味では、「リーダブルコード」が良いかも知れません。また、大学の先生に受けが良いのは、アルゴリズム系を扱った「珠玉のプログラミング」かも知れません。 ■ Code Complete第2版 http://www.amazon.co.jp/dp/489100455X ■ Effective Java 第2版 http://www.amazon.co.jp/dp/489471499X ■ プログラミング作法 http://www.amazon.co.jp/dp/4756136494 ■ リファクタリング http://www.amazon.co.jp/dp/4894712288 ■ 珠玉のプログラミング―本質を見抜いたアルゴリズムとデータ構造 http://www.amazon.co.jp/dp/4894712369 ■ 実装パターン http://www.amazon.co.jp/dp/4894712873 ■ Clean Code http://www.amazon.co.jp/dp/4048676881 ■ リーダブルコード http://www.amazon.co.jp/dp/4873115655 ちなみに、ズバリ「ビューティフルコード」という本も有りますが、この質問とは少しスケールの違う話題を扱っている感じですね。 http://www.amazon.co.jp/dp/4873113636

参考URL:
http://www.alles.or.jp/~torutk/oojava/codingStandard/writingrobustjavacode.html
annie-san
質問者

お礼

やはり、量が少ないのはキレイなコードの一つなのですね。また、自分の解答で重複しているが多々あり、美しくない一番の原因はこれかー!と思ってちょっとへこみました。この質問の枠におさまらなかったくらいなので;;でも確かにこの重複をもっと簡潔にかけるようになれば、短くて分かりやすいコードが書けるようになるなと思います。 インデントも結構、曖昧にしていた部分が多かったので、これから気をつけたいと思います。 全てのリンクに目を通させて頂きました。現在持っているのはjavaの基本的な分厚い二冊なので、お薦めしていただいたリーダブルコード、個人的に気になったeffective java、プログラミングの作法、clean code、ビューティフルコードに書店などで目を通して、購入を検討したいと思います。珠玉のプログラミングも教授側からみたキレイなコードの例ということで参考にさせて頂きます。 丁寧なアドバイスありがとうございました。

その他の回答 (1)

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.1

自分ならどんなコードを書くだろう,と興味がわいたので試してみました。 class Q7960224 { public static void main(String[] args) { int[] denomi = {1000, 500, 100, 50}; int[] denums = { 5, 5, 4, 2}; int amount = Integer.parseInt(args[0]); if (amount > 8000 || amount % denomi[denomi.length - 1] != 0) { System.out.println("マシンA内の金種では支払いできない"); System.exit(0); } for (int i = 0; i < denomi.length && amount > 0; i++) { int number = Math.min(denums[i], amount / denomi[i]); if (number != 0) { System.out.println(denomi[i] + "円が" + number +"枚"); amount -= denomi[i] * number; denums[i] -= number; } } } }

annie-san
質問者

お礼

当方が書いたコードは、多分類似の問題でよくある繰り返しを使った(***円の場合、、、)ので、すごく長くなりました。なので、短さにびっくりです。しかもそれでも数時間かかったので(!)、解答された時間の早さに驚きました。 解答ありがとうございました。

関連するQ&A

専門家に質問してみよう