エンジニアのお前らを卒倒させるコード書いてみた
こんにちは
そういえば自分がプログラマであることを思い出したので、
たまには技術系の記事でも書いてみようと思います。
「プログラミングよく分かんないよ~;;」という方はガン無視して書いていきますので、恐れ入りますが頑張ってください
「プログラミング分かるぜ!!!」という方は本記事を読むと頭が痛くなってくるかと思いますが、頑張って読んでください
初級編①
それではこちらのコードをどうぞ(言語はJava)
Main.Java
public Class Main{
public static void main(String[] args) {
String hensuuwa-rudo = "Hello, World!";
// ↑の文字列を「GoodBye, World?」にして出力
System.out.println(hensuuwa-rudo.replace("Hello", "GoodBye").substring(12, 13).concat("?"));
}
}
①変数名がキモ過ぎる
String hensuuwa-rudo = "Hello, World!";
・変数名を日本語名+英語名にするな
・単語の区切りは大文字にしろ
・そもそも変数ワールド is 何
一応プログラミング知らない人向けに補足すると、
「変数」という箱に文字列を代入できるんですが、
この変数名が「hensuuwa-rudo」なのが読みにくすぎるという話です
命名規則大事
②引数にメソッドをぶちこみ、メソッドチェインをふんだんに利用した長い長い1文
String hensuuwa-rudo = "Hello, World!";
System.out.println(hensuuwa-rudo.replace("Hello", "GoodBye").substring(12, 13).concat("?"));
(うわぁ読みにく・・・・)
・1文にまとめるな!!!!!!読みにくいだろ!!!
・メソッドの引数にメソッドを使うな(場合による)
・メソッドを3つも繋げるな(場合による)
・substringとconcatなんか使わんでreplaceで統一しろ
誰だよこのコード書いたの!!!!!!!!
あ、俺か・・・・
リファクタリング(言いたいだけ)
Main.Java
public Class Main{
public static void main(String[] args) {
// 変更前
// String hensuuwa-rudo = "Hello, World!";
// System.out.println(hensuuwa-rudo.replace("Hello", "GoodBye").substring(12, 13).concat("?"));
// 変更後
String helloWorld = "Hello, World!";
// 「GoodBye, World?」に変換して変数に代入
String goodbyeWorld = helloWorld.replace("Hello", "GoodBye").replace("!", "?");
// コンソールに出力
System.out.println(goodbyeWorld);
// そもそも変数使わずに System.out.println("GoodBye, World?"); で良くね?という方はお黙りください
}
}
いくらかマシになった気がしますが、
「GoodBye, World?」という不穏なメッセージを表示させたい人間の気持ちが分からないので、要件定義からやり直す必要があるかもしれません
初級編②
Main.Java
public Class Main{
public static void main(String[] args) {
// 1~5までの配列を生成
int[] array = new int[];
for(int i = 1; i < 5; i++) {
// 数字を格納
array[i] = i;
}
String message;
// 拡張for文で変数messageに文字を連結
for(int num : array) {
message += num.toString();
}
// コンソールに出力
System.out.println(message);
}
}
コンパイルエラーだらけなので全然よくないです
①変数・配列をちゃんと宣言しろ
int[] array = new int[];
これダメです。
配列は固定長なので、要素数を指定するか、宣言と同時に値を代入して初期化しないといけないです。
(リストなら可変長なので長さ指定しなくてもOK)
// int[] array = new int[];
// 修正例1
int[] array1 = new int[5];
//修正例2
int[] array2 = {1, 2, 3, 4, 5};
あとこれもダメ
String message;
// 拡張for文で変数messageに文字を連結
for(int num : array) {
message += num.toString();
}
// コンソールに出力
System.out.println(message);
}
文字列型変数のmessageが初期化されていない(最初に値が入ってない)ので、文字列連結させようとしたりprintlnの引数にさせようとするとコンパイルエラーとなります。
②for文が回せてないよ~
// 1~5までの配列を生成
int[] array = new int[];
for(int i = 1; i < 5; i++) {
// 数字を格納
array[i] = i;
}
forループの初期値が i=1、継続条件が「iが5未満」なので、
「1, 2, 3, 4」の4回しかループしないです。
よってこの配列は、
「null, 1, 2, 3, 4」の5要素となります。
配列arrayは要素0に「null」が入ってしまっているため、
以下の個所で「nullPointerException」となります。ガッ
// 拡張for文で変数messageに文字を連結
for(int num : array) {
message += num.toString();
}
refactoring(カッコつけたいだけ)
Main.Java
public Class Main{
public static void main(String[] args) {
// 1~5までの配列を生成
int[] array = new int[5];
for(int i = 0; i < array.length; i++) {
// 数字を格納
array[i] = i + 1;
}
String message = "";
// 拡張for文で変数messageに文字を連結
for(int num : array) {
message += Integer.toString(num);
}
// コンソールに出力
System.out.println(message);
}
}
まとめ
中級編まで書こうと思いましたが、初心者なので初級編までしか書けませんでした。
自分でクソコードを生み出し、解説し、修正するという意味の分からない時間外労働をさせられましたが、毎日投稿が1日消化できたので満足するとします。
それではまた。