/** * ドメイン非依存URL出力フィルタ * javadrill.tech移行時はwp_options.home/siteurlのみ変更すればよい * * データベースには絶対URL(https://minner.asia)を保持し、 * 表示時に現在のドメイン(home_url())に動的変換する */ function javadrill_make_urls_dynamic($content) { if (empty($content)) { return $content; } // データベース内の絶対URLを現在のhome_url()に置換 $old_url = 'https://minner.asia'; $new_url = untrailingslashit(home_url()); // http版も対応(念のため) $content = str_replace($old_url, $new_url, $content); $content = str_replace('http://minner.asia', $new_url, $content); return $content; } // 投稿本文、ウィジェット、タームの説明、抜粋に適用 add_filter('the_content', 'javadrill_make_urls_dynamic', 20); add_filter('widget_text', 'javadrill_make_urls_dynamic', 20); add_filter('term_description', 'javadrill_make_urls_dynamic', 20); add_filter('get_the_excerpt', 'javadrill_make_urls_dynamic', 20); 104 「static修羅道」 StepFinal 解答例 | Javaドリル

104 「static修羅道」 StepFinal 解答例

eyecatch104-stepFinal 104「static修羅道」

Player.java

public class Player {
  // インスタンス変数:プレイヤーの名前
  private String name;

  // インスタンス変数:プレイヤーのスコア
  private int score;

  // クラス変数:全プレイヤーに共通の最高スコア
  private static int highScore = 0;

  // コンストラクタ:名前を初期化、スコアは0のまま
  public Player(String name) {
    this.name = name;
    this.score = 0;
  }

  // スコアを更新し、必要に応じて highScore も更新する
  public void setScore(int newScore) {
    this.score = newScore;

    // 最高スコアを上回っていれば更新
    if (newScore > highScore) {
      highScore = newScore;
    }
  }

  // プレイヤーのスコア情報を出力
  public void display() {
    System.out.println(name + " のスコア: " + score + "(現在の最高スコア: " + highScore + ")");
  }
}

Main.java

public class Main {
  public static void main(String[] args) {
    Player p1 = new Player("Alice");
    Player p2 = new Player("Bob");

    p1.setScore(50);
    p1.display(); // Alice のスコア: 50(現在の最高スコア: 50)

    p2.setScore(80);
    p2.display(); // Bob のスコア: 80(現在の最高スコア: 80)

    p1.setScore(100);
    p1.display(); // Alice のスコア: 100(現在の最高スコア: 100)
  }
}

実行結果

Alice のスコア: 50(現在の最高スコア: 50)
Bob のスコア: 80(現在の最高スコア: 80)
Alice のスコア: 100(現在の最高スコア: 100)

解説

この最終ステップでは、「staticと非staticの設計的な使い分け」を統合的に理解します。


score はインスタンス変数(非static)

  • 各プレイヤーが 自分専用のスコア を持っている
  • だから private int score; は非static
  • p1 のスコアと p2 のスコアは完全に独立して存在する

highScore はstatic変数(クラス全体で共有)

  • 「最高スコア」はゲーム全体で1つだけ存在すればいい
  • どのプレイヤーがスコアを更新しても、条件に応じて highScore に反映される

setScore() のロジックに設計の意図を込める

if (newScore > highScore) {
  highScore = newScore;
}
  • この一行が、「全体で共有される記録を管理する」という static の意味と責任を表している
  • static を使うことによって、「設計でコードに意図を刻む」ことができる

まとめ

  • インスタンスごとの情報(name, score)は非staticで持つべき
  • 全体で1つしか存在しない情報(highScore)はstaticで持つべき
  • static を使うかどうかは「値を共有すべきかどうか」で判断する
  • 設計意図をコードに刻む──それがstatic修羅道のゴール

104 ステップアップ問題 「static修羅道」


Just Keep Typing, Baby!では、この「static修羅道」でつまづいた人向けの解説をしています。こちらもぜひ!

// tesh:
// 大丈夫。書いたオレも昔つまずいた。だから残してある。

🎯 実習で理解を深めよう

この内容についてJavaDrillで実際に手を動かして学習できます

コメント

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