オブジェクト指向プログラミング十戒 5 利用できる機能は最大限利用する


 

5 利用できる機能は最大限利用する

最近の言語には、ソートや検索などの便利な機能が備わっていることが多い。こういった機能を大いに利用して自分ではコーディングしない。コーディングしなければ試験の必要もない。

ZipCode.java
public class ZipCode { public boolean isZipCode(String s) { // 郵便番号(123-4567 のような形式)かをチェックする if (s.length() != 8) return false; if (s.charAt(3) != '-') return false; String a = s.substring(0, 3); String b = s.substring(4, 8); try { Integer.parseInt(a); Integer.parseInt(b); } catch(Exception e) { return false; } return true; } }

(存在を知らないのか使用方法が分からないのか)既存のメソッドを使用せず、自分でコーディングしました。

ZipCode.java
public class ZipCode { public boolean isZipCode(String s) { return s.matches("[0-9]{3}-[0-9]{4}"); } }

正規表現で比較できる matches メソッドを利用しました。

正規表現を使用できる String クラスのメソッドには次のようなものがあります。

boolean
matches(String)
引数の正規表現と一致するか?
String
replaceAll(String, String)
第一引数の正規表現と一致する部分をすべて第二引数に置換した文字列を返す
String
replaceFirst(String, String)
第一引数の正規表現と最初に一致する部分を第二引数に置換した文字列を返す
String[]
split(String, int)
第一引数の正規表現と一致する部分で分割して、文字列配列(配列の最大数は第二引数の値)にして返す
String[]
split(String)
第一引数の正規表現と一致する部分で分割して、文字列配列にして返す

この外にも、正規表現パターンを指定する Pattern と、比較した結果を受け取る Matcher というクラスがあります。


既存のクラスに処理を委譲する。

Process.java
public class Process { public void printMessage(String message) { // 略(この例では ◎ を付ける) String mess = "◎" + message; System.out.println(mess); } // 略 }

同様な処理をするメソッドがあるのに新たに作成しました。

Printer.java
public class Printer { public void print(String message) { // 略(この例では ◎ を付ける) String mess = "◎" + message; System.out.println(mess); } }
Process.java
public class Process { private Printer printer = new Printer(); public void printMessage(String message) { printer.print(message); // 処理を委譲 } // 略 }

同様な処理をする Printer クラスの print メソッドがあるので、処理を委譲します。