【Java】コンソール出力するならこれ!printlnからprintfまで現場の鉄則を伝授

【Java】コンソール出力するならこれ!printlnからprintfまで現場の鉄則を伝授 Java

江田島だ。

貴様ら、Javaの学習を始めて最初に書いたコードは何だ?
「Hello World」だろう?

コンソールに文字を出す。
たったそれだけのことが、すべてのプログラムの原点だ。

だがな、最近の若手を見ていると、ただ System.out.println をコピペして、中身も理解せずに「動きましたっ!」と報告してくる。
喝だッ!!

コンソール出力はデバッグの基本であり、システムの健康状態を知るための「叫び」だ。
その「書き方」一つに魂を込められない奴が、何万行もの大規模なコードを書けるわけがない。

今日は、Javaにおける標準出力のすべてを貴様らの脳髄に直接書き込んでやる。
心して読めっ!

【執筆者の簡易プロフィール】
江田島 執筆者:江田島
  • 43歳男性、既婚、1児の父
  • アプリケーションエンジニア
  • 大手受託開発企業に勤務中
  • Java一筋の職人(教え方はスパルタ気味)
  • 嫌いなもの:やる気のないエンジニア

基本の「println」と「print」の違いを理解せよ!

まずは基本中の基本、printlnprint だ。
この2つの違いを「改行があるかないか」程度にしか考えていない奴は、現場でログがぐちゃぐちゃになって泣きを見ることになるぞ。

以下のコードを見て、その挙動を脳内に叩き込め。

public class Main {
public static void main(String[] args) {
// printlnは出力した後に「改行」を入れる
System.out.println("江田島、参上!");
System.out.println("基礎を疎かにするな!");

    // printは改行せず、そのまま横に繋げる
    System.out.print("継続は");
    System.out.print("力なり。");
}
}

System.out.println の「ln」は「line」の略だ。
つまり、指定した文字列を吐き出した直後に、目に見えない「改行コード」をぶち込んでいる。
これに対して System.out.print は、出力した位置でカーソルを止める。

現場ではな、ループ処理の進捗を一行で出したい時は print を使い、区切りの良いメッセージやログを出す時は println を使うのが鉄則だ。

この使い分けすらできない奴は、今すぐエディタを閉じろっ!

printfで出力を「整列」させろ!プロのこだわりだ

数値を出す時、桁数がバラバラで読みづらい出力を放置している奴がいる。
軟弱者がッ!!

プロの現場では、データの視認性は命だ。
そこで使うのが System.out.printf (フォーマット付き出力)だ。
これはC言語の流儀を継承した、非常に強力な武器だ。

public class Main {
public static void main(String[] args) {
String name = "江田島";
int power = 9999;
double speed = 85.5;

    // %sは文字列、%dは整数、%fは浮動小数点数を意味する
    // %5dのように書けば、5桁の幅で右詰め表示ができる
    System.out.printf("名前:%s | 攻撃力:%5d | 速度:%.1f\n", name, power, speed);
}
}

このコードの凄みがわかるか?

%5d と書けば、数値が何桁であろうと「5文字分のスペース」を確保して右詰めにする。
%.1f は、小数点以下を第1位まで表示するという指定だ。

表形式でデータを出す時に、これができるかできないかで、デバッグの効率は100倍変わる。

「適当に出てればいい」という甘えを捨てろ。
美しく整列されたログこそが、バグを炙り出す最短ルートだ!

標準出力(out)と標準エラー出力(err)を使い分けろ!

貴様ら、なんでもかんでも System.out で出してはいないか?
Javaには System.err という、もう一つの出力ルートが存在する。

これを使い分けない奴は、運用監視の現場でインフラ担当者にこっぴどく叱られることになるぞ。

public class Main {
public static void main(String[] args) {
// 通常の案内メッセージ
System.out.println("システムを起動します...");

    try {
        // 何か重大な問題が起きたと想定
        throw new Exception("緊急事態発生!");
    } catch (Exception e) {
        // 異常事態は「標準エラー出力」へ出すのが義務だ!
        System.err.println("エラー: " + e.getMessage());
    }
}
}

なぜ System.err を使うのか。

それは、「正常な記録」と「異常な警告」を物理的に分けるためだ。
Unix系のシステムなら、正常ログだけをファイルに保存し、エラーだけを画面に出すといった制御ができる。

System.out だけしか使わない奴のプログラムは、ゴミ箱の中に宝石を混ぜるようなものだ。
後から探す身にもなってみろ。重要なエラーは err で出す。これがエンジニアの「良心」だっ!

配列の中身を出す時に住所(ハッシュ)を出すな!

初心者がよくやる、もっとも無様なミスを教えてやろう。
配列をそのまま println にぶち込む行為だ。

int[] numbers = {1, 2, 3};
System.out.println(numbers); // [I@15db9742 とかいう謎の文字列が出る

バカ者がっ!! それはデータの「値」ではなく、メモリ上の「住所(ハッシュ値)」だっ!

配列の中身をコンソールで確認したいなら、Arrays.toString() を使え。

import java.util.Arrays;

public class Main {
public static void main(String[] args) {
int[] missionCodes = {101, 202, 303};

    // Arrays.toStringを使って、中身を分かりやすく文字列化する
    System.out.println(Arrays.toString(missionCodes));
}
}

この Arrays.toString() を通すことで、初めて [101, 202, 303] という人間が読める形式になる。
デバッグで謎の記号が出てパニックになる前に、ライブラリの力を正しく借りることを覚えろ。

まとめ|出力はプログラムとの対話だ

Javaのコンソール出力、舐めていた奴は少しは目が覚めたか?

改行の有無を制御し、ログの連続性を保て!
printf を使いこなし、データを美しく整列させろ!
System.err を使い、異常を際立たせろ!
配列を出す時は Arrays.toString() を忘れるな!

コンソール出力は、プログラムが貴様に送ってくる唯一のメッセージだ。
それを疎かにする奴に、プログラムを操る資格などない。

今日学んだことを忘れるな。
次に会う時は、もっと「漢」のコードを書けるようになれ。

以上だ、解散っ!!

コメント

タイトルとURLをコピーしました