gakkie プログラミング 備忘録

tech::expert(現tech camp) 45期

湯婆婆でJava例外処理練習

去年流行ったJavaで湯婆婆を実装してみる を参考に例外処理を実装する。

空文字に例外を投げることはできたが全角スペースを許容してしまう。 今回は全角スペースを許容もチェックする。

結論

  • trimメソッドを使って名前を入力した時点で全角スペースを除く処理にした。

失敗

import java.util.Random;
import java.util.Scanner;

public class Main {
    public static void main(String[] arts){
        System.out.println("契約書だよ。そこに名前を書きな。");
        Scanner keiyakusho = new Scanner(System.in);
        String name = keiyakusho.nextLine();
        if (!name.matches("/[^\\s ]/")){
            return;
        }
        
        Yubaba(name);
    }
    private static void Yubaba(String name) {
        try {
            Random random = new Random();
            int newNameIndex = random.nextInt(name.length());
            String newName = name.substring(newNameIndex,newNameIndex+1);
            System.out.println("フン。"+name +"というのかい。贅沢な名だねぇ。");
            System.out.println("今からお前の名前は"+newName+"だ。いいかい、"+newName+"だよ。分かったら返事をするんだ、"+newName+"!!");
        }catch(Exception e) {
            System.out.println("ちゃんと名前を書きな!");
        }
    }
}

完成

import java.util.Random;
import java.util.Scanner;

public class Main {
    public static void main(String[] arts){
        System.out.println("契約書だよ。そこに名前を書きな。");
        Scanner keiyakusho = new Scanner(System.in);
        String word = keiyakusho.nextLine();
        String name = word.trim();
        Yubaba(name);
    }
    private static void Yubaba(String name) {
        try {
            Random random = new Random();
            int newNameIndex = random.nextInt(name.length());
            String newName = name.substring(newNameIndex,newNameIndex+1);
            System.out.println("フン。"+name +"というのかい。贅沢な名だねぇ。");
            System.out.println("今からお前の名前は"+newName+"だ。いいかい、"+newName+"だよ。分かったら返事をするんだ、"+newName+"!!");
        }catch(Exception e) {
            System.out.println("ちゃんと名前を書きな!");
        }
    }
}

Java例外処理練習

Main.java

public class Main {
    public static void main(String[] args) throws Exception {
 
        String str1 = "apple";
        String str2 = "";
        
        boolean bool1 = str1.isEmpty();
        boolean bool2 = str2.isEmpty();
        
        System.out.println("bool1 : " + bool1);
        System.out.println("bool2 : " + bool2);
    }
}

35以上続けるために意識すること

  • まず、引数チェック、状態チェックは必ずやれ。コードが語る、 →悲惨なバグやメンテナンス性の低下はそういった自分の意図の表明を横着したコードから起こり始める。 「俺はこれをやる、だからこの機能を呼び出すならこういう状態にした上でこういう情報を渡せ、 じゃないならやらない」とはっきり言え。もしこの辺を冗長だと考える同僚がいるならもう辞めたほうがいい。

  • 引数チェックや状態チェックのコードで画面の半分が埋まったならそのコードは設計がおかしい。

一旦手を止めてよく考えろ。一つの機能を動かすのにそんなに引数がいるのか、そんなにチェックする状態が多いのか、そしてそれらは本当に必要か検討しろ。

  • テストコードは絶対に書け。テストコードが書けない技術は絶対に使うな。

意味のあるテストが書けないならやめたほうがいいという輩もいるが、とにかく意味があろうとなかろうと書け。 引数にこれを入れたらこうなる、こういう状態でこういう事したらこうなる、というお前の意図はとにかく示せるだけ示せ。

だいたいこの辺を横着したやつは翌年酷く後悔するか、そこのメンテを担当した同僚を攻撃している。

参考記事(いつもありがとうございます)

anond.hatelabo.jp

Java 例外処理

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        System.out.println("ようこそ\n数字を入力してください");
        String s = new Scanner(System.in).nextLine();
        //i = Integer.parseInt(s);
        //System.out.println("入力値:" + s);
        try {
            //例外が発生する可能性のある処理
            int i = Integer.parseInt(s);
            System.out.println(i);
        } catch (NumberFormatException e) {
            //例外が発生した場合の処理(例外が発生しなければ行われない処理)
            System.out.println("ちゃんと数字を入力してください!");
        }
    }
}

Javascript 無料で見れるおすすめ参考書

JavaScript Primer 迷わないための入門書

  • ECMAScript 2015以降をベースにして一からJavaScriptを学べる書籍
  • プログラミングをやったことはあるが、今のJSがよくわからないという人向け、 今のJavaScriptアプリケーションを読み書きできるように書かれている。

200725 初版