初心者の質問ですが、javaで課題提出したら、コードが長いというのと、for文とかlist使って凡庸的に仕上げなさいと言われたんですが、それってけっこう難しくないですか? また何かいい本はありますか? よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/03 08:48
2019/04/03 08:59
2019/04/03 11:27
2019/04/03 12:05
退会済みユーザー
2019/04/03 13:52
回答5件
0
恐らく, 繰り返しで書けるモノを全部展開した状態にしたものと想像します.
// 例) 1~100の合計値を表示 // 繰り返し: 5行 int sum = 0; for(int i=1; i<=100; i++) { sum += i; } System.out.println("sum="+sum); // 全部並べた: 102行 int sum = 0; sum = sum + 1; sum = sum + 2; sum = sum + 3; sum = sum + 4; //(中略) sum = sum + 97; sum = sum + 98; sum = sum + 99; sum = sum + 100; System.out.println("sum="+sum);
ですので, 繰り返しで書けば短くなり, 理解している者には難しくないことだろうと推測します.
for や list を習っているからこそ指摘されたものと思いますので, 復習されれば良いかと思います.
投稿2019/04/03 09:17
編集2019/04/03 09:43総合スコア12646
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
Javaは普段書かないのと質問に具体的なコードが示されていないため具体的な回答は書けませんが、
プログラミング全般における一般論として回答します。
まず、「コードを長いと言われた」点について、「コードを短く」するいうことについてお話します。
「コードを短くする」というのは単純に文字数を減らすという意味合いではありません。
コードゴルフと呼ばれる競技プログラミングにおいては、以下に少ない文字数で機能を実装するかという目的で、
いろんなテクニックを使ってコードを短くしていきますが、
実用的なプログラミングにおいては、このようなテクニックを使うことはありません。
例として、以下の記事が見つかりましたので提示します。
Java で書いた FizzBuzz を短くしながら仕様について学ぶ - Qiita
こちらの記事には、コードをどんどん「短くしていく」過程が書かれていますが、
恐らく課題を出した方の意図としては、こういう意味合いで「コードが長い」と言ったことではないはずです。
まず、この点についてはご注意ください。
競技プログラミング的なコードを短くする技術は「とても難しい」です。
さて、本題の「コードが長い」についてですが、
for文とかlist使って凡庸的に
と言われたということですが、(…ちなみに「凡庸的」ではなく「汎用的」ですかね)
この内容から察するに、質問者様が提出されたコードは、
- 同じ処理を複数回書いている
- 似たような名前の変数がたくさんある
- 複数回コピペした部分がある
というような状態になっていませんか?
プログラミングの原則にDRYと呼ばれるものがあります。
同じ処理をコピペしたのであれば、その処理は確実にループやモジュール化を行うなどしてまとめることができるはずです。
こういったテクニックはJavaだけに関わらずほぼ全てのプログラミングで必要になる手法ですので、身につけたほうがよいです。
…が、正直なところ、私自身どうやって身につけたのかは昔過ぎて既に覚えていません…。
ですので、難しいかどうかも判断できないのですが、
プログラマーとして活動している方は例外なく使うことができる技術ですので、
繰り返しプログラミングに触れていくことで自然と身につくものではないかと思っています。
つまり小さい子供が自転車に乗ることみたいなものですので、
難しいとも簡単とも言い難いなというのが率直な感想です。
というわけで、長文になりましたが、おすすめの本を書いておきます。
プリンシプル オブ プログラミング3年目までに身につけたい一生役立つ101の原理
https://www.amazon.co.jp/dp/4798046140/
具体的なコード例はあまり書いてない本ですが、一度目を通しておくことをお勧めします。
具体的なコードを短くする手法について知りたいのであれば、
とにかくいろんなコードを読み、自分で書くことです(単純な写経も結構良いです)。
その上で、もしわからないことが出たのでれば、
他の方も書いていらっしゃるように実際のコードを含めてご質問されたほうが良いでしょう。
頑張ってください。
投稿2019/04/03 09:40
総合スコア241
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
きれいなコードを書くための書籍はたくさんありますが、定番のものを挙げておきます。
投稿2019/04/03 22:21
総合スコア6500
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
「コードが長い」というのはおそらく もっと短く、簡潔に、そして効率的にコードを書こう ということだと思います.そのために同じような処理はfor
文や配列でまとめたり,メソッド
の部分に切り離したりします.
たとえば,0から9まで偶数の時"even", 奇数の時"odd"と表示するコードを書くとします。
(i)for
文を使わずに書くと
java
1public class Main { 2 public static void main(String[] args) throws Exception { 3 4 System.out.println("0:even"); 5 System.out.println("1:odd"); 6 System.out.println("2:even"); 7 System.out.println("3:odd"); 8 System.out.println("4:even"); 9 System.out.println("5:odd"); 10 System.out.println("6:even"); 11 System.out.println("7:odd"); 12 System.out.println("8:even"); 13 System.out.println("9:odd"); 14 } 15}
となりますが,ご覧の通り コードは長いうえに非効率です。9までだったからよかったけれど
これが99までとかになると大変になるますよね?
このコードを簡潔にするためにfor
文を使います
(ii)for
を使ってとりあえず短くする
java
1public class Main { 2 public static void main(String[] args) throws Exception { 3 4 for(int i = 0; i < 10; i++){ 5 System.out.print(i + ":"); 6 if(i % 2 == 0){ 7 System.out.println("even"); 8 } 9 else{ 10 System.out.println("odd"); 11 } 12 } 13 } 14} 15
先ほどよりは簡潔になりました. これでもいいですが、if
を使わずに、もっと短く書くこともできます。
ここで、配列を使います。
java
1public class Main { 2 public static void main(String[] args) throws Exception { 3 4 String[] text = {"even","odd"}; 5 6 for(int i = 0; i < 10; i++){ 7 System.out.println(i + ":" + text[i % 2]); 8 } 9 } 10}
どうですか? 見た目 とても簡潔だと思いませんか?
このように同じ結果でも書いたコードによって可読性に差が出ます。
またif
文は分岐がある分処理するときメモリを消費します。
if
文を使わないことでメモリ消費も節約できます。
for文とかlist使って凡庸的に仕上げなさいと言われたんですが、それってけっこう難しくないですか?
.for
文を使うとき、自分がやっていることを述べると
- 規則性を見つけ一つにまとめる
例)1,4,9,16,25,36,49 ... -> 平方数だから (for
文でループさせる変数i
)^2
- 2重
for
文などで変数が多くなりわかりづらいときは、紙に書いて地道に処理を追いかける。
自分で考え、理解することで自分のものになり 上達すると思います。
#最後に
プログラミングは頭で考えるのが80%, 実際にコードに落とし込むのが20%だといわれています。
またプログラミングは文法やコードをを覚える学問ではなく、理解する学問です。
最初は、理解し難い処理があるかもしれませんが、勉強していくと少しずつ分かってくると思います。
投稿2019/04/03 12:46
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
1 から 100 までを足し算したらいくつになるか?
という問題にはいくつかの方法があります。
-
1 + 2 + 3 ... + 100 と 長い計算式を書く
-
for 構文をつかって繰り返し部分をまとめるように書く
-
糖鎖数列の和の公式をつかって1つの式で書く
まずは java の構文を学ぶことで、コードを短く汎用的にできます、
次は、アルゴリズムを学ぶことです。
参考情報
- ガウスの逸話
投稿2019/04/03 22:23
総合スコア22324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。