私はオブジェクト指向プログラミングと機能プログラミングを学んでいます。私はあなたに10分でOOPを説明する、この非常に良い簡単な例を見つけました(あなたが良い例を知っていれば示唆してください)。など機能プログラミングを使用してこのコードを書く方法
DEMO.PHP
<?php
Include_once(“player.php”);
$p1 = new player();
$p1->name = “Brutus”;
$p1->type = “Warrior”;
$p1->hitpoints = 100;
$p2 = new player();
$p2->name = “Mysterio”;
$p2->type = “Sorcerer”;
$p2->hitpoints = 100;
$p1->meleeAttack($p2);
$p2->meleeAttack($p1);
Echo “<h1> Fight Results</h1>”;
Echo “<h2>.$p1->name.” now has “.$p1->hitpoints.” hit points</h2>”;
Echo “<h2>.$p2->name.” now has “.$p2->hitpoints.” hit points</h2>”;
?>
PLAYER.PHP
<?php
Class player {
public $name;
public $type;
public $hitpoints;
public function meleeAttack($target){
$current_hp = $target->hitpoints; // hp is for hitpoints
$damage = rand(10,20);
if($this->type == “Warrior”) { // condition logic
$damage += 10;
}
$target->hitpoints = $current_hp - $damage;
}
}
?>
乾杯、 P.S.何のループ再帰ない、不変性を持つ - 今 https://www.youtube.com/watch?v=4c4nP7GLL1c
、私は機能的な方法でこのコードを書く方法を学びたいです私はPHPを知らないので、私はHaskellを使用して、関数型プログラミングを行う方法を説明しますPHPは関数型プログラミングのための選択の言語、それを思い出させる必要はありません:)
それほど大きな違いはありません。あなたは交換するループがありません。基本的には、 'meleeAttack'を2人のプレーヤーを引数とし、プレーヤーを変更するメソッドではなく、ヒットポイントを減らした新しいPlayerを返す関数にします。ランダムなダメージをどのように処理するかは、純粋な関数型言語を使用しているかどうかによって異なります。 – chepner
私は理解していません、 "...新しいプレーヤーを返します..."の部分。古いプレイヤーはどうなりますか?どのプレイヤーが最新のプレイヤーであるかをプログラムはどのように知っていますか?私はコードを参照する必要があります:( – user3013157
ラップされた属性を更新する代わりに、ヒットポイントが少ない以外は、既存のプレイヤーを同一の新しいオブジェクトに置き換えます。 'meleeAttack'はコピーコンストラクターのようになりますプレイヤー1がプレイヤー2を攻撃した場合、あなたは '$ p2 = meleeAttack($ p1、$ p2)'のようなものを書くでしょう。 – chepner