ハック
こんにちは、運営者のハックです!
Javaコース上級ミニゲーム開発編Day7の今回はコードの整形のためリファクタリングをしたので、その内容を紹介します。
今まで作成したコードのリファクタリングをしよう
今回は今まで作成したコードのリファクタリングを行いました。リファクタリングするにあたり中級編Day21「onCommandをなくす」及びDay22「様々なリファクタリング」の回を参考にしました。
実際のコード
実装するにあたり以下のコードを作成及び追加しました。
- BaseCommandクラスを作成し、OreMiningCommandクラスからonCommandを無くした
- StreamAPI利用によるリファクタリング
//OreMiningCommandクラス
// gamePlayメソッドを抽出
gamePlay(player, nowPlayerScore);
/**
* ゲームを実行します。規定の時間内に鉱石を採掘すると、スコアが加算されます。合計スコアを時間経過後に表示します。
*
* @param player コマンドを実行したプレイヤー
* @param nowPlayer プレイヤースコア情報
*/
private void gamePlay(Player player, PlayerScore nowPlayer) {
Bukkit.getScheduler().runTaskTimer(main, Runnable -> {
if (nowPlayer.getGameTime() <= 0) {
Runnable.cancel();
player.sendTitle("ゲーム終了!",
nowPlayer.getPlayerName() + " 合計" + nowPlayer.getScore() + "点!お疲れ様でした!",
0, 45, 5);
nowPlayer.setScore(0);
return;
}
nowPlayer.setGameTime(nowPlayer.getGameTime() - 5);
}, 0, 5 * 30);
}
@Override
public boolean onExecuteNPCCommand(CommandSender sender, Command command, String label, String[] args) {
return false;
}
//APIを利用
private PlayerScore getPlayerScore(Player player) {
PlayerScore playerScore = new PlayerScore(player.getName());
if (playerScoreList.isEmpty()) {
playerScore = addNewPlayer(player);
} else {
playerScore = playerScoreList.stream()
.findFirst()
.map(ps -> ps.getPlayerName().equals(player.getName())
? ps
: addNewPlayer(player)).orElse(playerScore);
}
playerScore.setGameTime(GAME_TIME);
return playerScore;
}
//BaseCommand クラス
/**
* コマンドを実行して動かすプラグイン処理の基底クラスです。
*/
public abstract class BaseCommand implements CommandExecutor {
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (sender instanceof Player player) {
return onExecutePlayerCommand(player,command,label,args);
} else {
return onExecuteNPCCommand(sender,command,label,args);
}
}
/**
* コマンド実行者がプレイヤーだった場合に実行します。
* @param player コマンドを実行したプレイヤー
* @param command コマンド
* @param label ラベル
* @param args コマンド引数
* @return 処理の実行有無
*/
public abstract boolean onExecutePlayerCommand(Player player, Command command, String label, String[] args);
/**
* コマンド実行者がプレイヤー以外だった場合に実行します。
* @param sender コマンド実行者
* @param command コマンド
* @param label ラベル
* @param args コマンド引数
* @return 処理の実行有無
*/
public abstract boolean onExecuteNPCCommand(CommandSender sender,Command command, String label, String[] args);
}
ねこ奈
StreamAPIは初級編Day10で学んだ機能なのにゃ。
モナ
今回の内容も行っていることは中級編とほぼ変わりません。
基本的な機能は変わっていませんが、リファクタリングによりコードの可読性を高めます。
実装結果
リファクタリング後も動作が正常に作動することを確認できました。
まとめ コードの可読性は実際にコードを見て考える
今回は今まで作成したコードのリファクタリングを行い、可読性を高めました。
ハック
何でもかんでもリファクタリングを行う必要はありません。
むしろリファクタリングを行ったために、かえってコードの可読性が低下してしまう場面もあります。コードが読みやすいか、読みやすいコードを作成できるかなどは自分で実際にコードを作成しリファクタリングをする中で習得するものだと思います。
以上で今回の学習記録を終えます。
ここまでご覧いただきありがとうございました。
コメント