本とネットだけでJavaを少し学んできた初心者です。
プログラムを合計4000行ほど書いたときに、いつも思うのですが、これまでのプログラムが
このような仕組みで良かったのかな
とか、
このクラスの分け方で良かったのかな
とか、
このアルゴリズムで良かったのかな
とか思ってしまいます。そうして、こっちの方がいいかも、と根こそぎ変更して結局バグやエラーがなくちゃんと動くけれども、クラスが相互依存になっていたりと汚いプログラムになってしまいます。
良いコードが書けるようなアドバイスや、正しいコードを閲覧できるようなサイトが御座いましたら、ご提示いただけると幸いです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答10件
0
まず基本ですが、「リーダブルコード」を読むことをおすすめします。
リーダブルコード――より良いコードを書くためのシンプルで実践的なテクニック
https://www.oreilly.co.jp/books/9784873115658/
また、クラス設計については、「デザインパターン」を学ぶと良いと思います。
「java デザインパターン」で検索すれば、たくさん解説サイトが見つかります。
オープンソースのコードであれば、GitHub で公開されていますので、自分の知っているライブラリのコードを読んで参考にするのも良いですし、自分の書いたコードを他の人にレビューしてもらうのも良いと思います。
他の人の書いたコードを読んで、良いところを自分のコードに取り入れるというのを繰り返していけば、徐々に良くなっていくと思います。
投稿2019/11/18 23:16
総合スコア6500
0
ベストアンサー
きれいなコードをかけるようになるにはどうすればいいですか
むしろ、「綺麗なコードを書きたい!!」と思えること自体、素晴らしいことだと思います。
文法あっているけど、汚いコードの定義とは何か、
個人的には
- 「非効率」のコード
- インデント グチャグチャ
- 無駄に改行しない・改行しすぎ
だと思っています。
まずは、自分の書きたいコードが書きたいように書けてから美しさ・綺麗さというものを追求していけば良いと思います。
意外と、自分なりのコードの美しさ・綺麗さを求めていくなら底無し沼です。
頑張ってください。
投稿2019/11/19 01:18
編集2019/11/19 02:39総合スコア10429
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/19 02:41
2019/11/19 02:44
2019/11/19 02:45 編集
2019/11/19 02:50
2019/11/19 02:52
2019/11/19 02:56
2019/11/19 02:56
2019/11/19 03:24
2019/11/19 04:06
2019/11/19 04:10
2019/11/20 14:51
2019/11/20 15:05
2019/11/20 15:11
2019/11/20 15:13
2019/11/20 15:24 編集
2019/11/20 15:33
2019/11/20 15:57
0
いきなり長文コードをキレイに書くのはどんな熟練者でも無理です。
しかし、先にロジックを机上で考えたり、部品を先に作っておくなどの工夫により整理されたコードを書くことはできます。
思うがまま書いていき結果的に4000行になってしまうことと
おおよそ4000行になるであろうと想定してから書き始めるのでは
コードの整理具合ですとか見栄えは大きく変わってきます。
作文だったり大掃除と考え方は似てます。
ゴールを意識して作業できているかどうかですね。
それなりに経験のいる作業なので、いきなり全てやろうとしなくて良いです。
今のコードを幾つかグループに分類してリファクタリングしていくと
見えてくることもあるでしょう。
それにひとつのことを実現するための手段はひとつではないので
「絶対的に正しいコード」は存在しません。
要件通り動くのが「正しいコード」です。
単に短くなればいいというわけではなく「できる範囲で過不足なくしっかり書くこと」が大事です。
追記-----
「コツ」の話をすると「数週間、数ヶ月経って読んだときに直さなくても良いと感じる」のが
「いいコード」と言えるかもしれません。
そこに対してあえてリファクタリングを施していくのも技術力の向上には役に立ちます。
(ので、「美しい」とか「キレイ」とかを追求するのはまた違うベクトルの話なのかなと思ってます)
投稿2019/11/18 22:52
編集2019/11/19 02:52総合スコア80875
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/20 15:51
2019/11/20 20:48
0
気になるコードを差し支えない範囲で質問に提示できると改善案が出てくるのでは?
とりあえず、コーディング・ルール
Google Java Style Guide
Javaコーディング規約 Future Enterprise Coding Standards
Java コーディング標準 オブジェクト倶楽部
Javaコーディング規約 qiita
辺りを参考にしてみては?
投稿2019/11/18 22:18
編集2019/11/18 22:41総合スコア16417
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
きれいなコードをかけるようになるにはどうすればいいですか
質問にある「きれい」って言葉が曖昧すぎだと思います。
「clean」なのか「beautiful」なのかで回答は大きく変わります。
いずれも先人の知恵に学ぶべきものですが、学ぶ方向性は大きく変わります。
「beautiful」なのであれば、数学や言語の仕様に関して学ぶ必要があります。
「clean」なのであれば、「リーダブルコード」「デザインパターン」かと。
例えば以下のコード
ruby
11.upto(100){|n|puts'FizzBuzz 2'[i=n**4%-15,i+13]||n}
めちゃくちゃ技巧的と思いますが、メンテナンス性が良いとは思いません。
多分、質問自体は「clean」を目指しているのではないかと思いますが、タグに「アルゴリズム」が入っているあたり、「beautiful」が混じっているように感じます。
ごっちゃになった状態では先に進めないので目指す先を整理したほうが良いです。
参考に Clean Code のエッセンスを貼っておきます。
https://qiita.com/kyammy/items/63db981d35886ee5806f
ビューティフルコードは混乱させるので紹介しません(有名なビューティフルコードは混じってますw)
投稿2019/11/20 22:37
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/20 23:55 編集
退会済みユーザー
2019/11/21 00:33 編集
2019/11/21 06:17
0
既に、参考となるような回答が、多く寄せられていますが、、
「きれいなコード」とは何って疑問を書いておきます。
以前にも書いたかも知れませんが、
「見た目、きれいだけど、正しく動作しないコード」
と、
「スパゲティで汚いけど、結果が正しいコード」
のどちらが良いでしょうか?
特殊な例、と言われるかも知れませんが、過去に出会っています。
「きれい」に"正しく動く"という事を含めるべきでしょうが、見た目、"きれい"で判断されるので、注意という事です。
自分の経験としても、モジュール化し、すっきりしていると思ったら、モジュールの狭間に、割込みが入って、デバッグに苦労した事があります。
また、設定を外部から、容易に変更可能にして、(自分的に)良かったと思ったら、引き継いだ人に完全に無視された(直書きで更新された)なんてのがあって、一筋縄で行かないな、と思っています。
きれいなコードは、「正しく動き」、「メンテナンスが容易な」コードではないかと思います。
投稿2019/11/19 14:11
総合スコア6385
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
良い文章、よい絵画、よい歌詞、よい曲...
よいコードを書くのも、それらと同じだと思います。
投稿2019/11/23 07:27
総合スコア22324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
良いコードが書けるようなアドバイスや、正しいコードを閲覧できるようなサイトが御座いましたら、ご提示いただけると幸いです。
私はこの手の質問を投稿される度に思うのですが、「この4000行は言語仕様的に仕方がなかった」のか「ただ漠然に書いたら4000行になった」のでは大きく異なります。
基本的に大事なのはこの3つです。
- 2回同じコードを書くなら関数等を作った方がいい
- サイクロマティック複雑度が高い数値を示していないか
- 美しい完璧なコードなど存在しない。「美しい」「完璧」は人の価値観によって変わるためである。
これがしっかり出来ているなら、「まだマシ」と言われるソースコードにはなります。
投稿2019/11/19 00:59
総合スコア3307
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/19 03:30 編集
2019/11/19 06:47 編集
2019/11/19 06:51
2019/11/19 06:52
2019/11/19 06:55
2019/11/19 07:15
2019/11/20 15:08
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/19 02:13
2019/11/20 15:23