我正在学习面向对象和函数式编程。我在10分钟内在YouTube上解释OOP发现了这个非常好的简短例子(如果你知道更好的例子,请建议),耶! https://www.youtube.com/watch?v=4c4nP7GLL1c您将如何使用函数式编程编写此代码
现在,我想学习如何编写这段代码的功能性的方式 - 与不变性,不递归循环等
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;
}
}
?>
干杯, 附:我知道,PHP是不是函数式编程所选择的语言,没有必要提醒吧:)
这不会是非常不同的;你没有循环来取代。基本上,你使'meleeAttack'成为一个以两个玩家为参数的函数,并返回一个新生命值降低的生命值,而不是一个使玩家变异的方法。根据你是否使用纯粹的功能语言,你如何处理随机伤害会有所不同。 – chepner
我不明白,“...返回一个新的玩家......”部分。老玩家会怎么样?程序如何知道哪个播放器是最近的?我需要看到代码:( – user3013157
)除了更新一个包装的属性,你用一个新的对象替换了现有的玩家,除了它有更少的生命点之外,'meleeAttack'变成了一个复制构造器,除了“copy “如果玩家1攻击玩家2,你会写'$ p2 = meleeAttack($ p1,$ p2)'这个函数让攻击者并将其目标作为参数,并返回目标的修改副本 – chepner