Middle+
Мөлчөрлүүлүк жана тазалык кандайча байланыштуу?
sobes.tech AI
AIден жооп
Иммутабелдик (өзгөрбөстүк объекттери) жана тазадык (жарактары жок функциялар) тыгыз байланышта, анткени иммутабелдик тазадыкка жетүүгө көмөктөшөт.
Таза функция:
- Ар дайым бирдей натыйжаны кайтарат бирдей кирүү маалыматтар үчүн.
- Өзүнүн чөйрөсүнөн тышкары абалды өзгөртпөйт (жарактары жок).
Эгер функция аргумент катары өзгөрүлмө объекттерди кабыл алып, аларды өзгөртсө, ал таза эмес, анткени анын чакыруусу системанын абалын функциядан тышкары өзгөртүшү мүмкүн.
Иммутабел объекттерди колдонуу менен:
- Функция берилген объекттерди өзгөртө албайт, анткени алар өзгөргүс эмес.
- Ар бир "өзгөртүү" жаңы объектти түзүүгө алып келет, бардыгын өзгөртүүнүн ордуна.
- Бул берилген аргументтер менен байланышкан жанама таасирлердин жоктугун камсыздайт.
Мисал:
<?php
// Өзгөрүлмө объект
class MutablePoint {
public $x;
public $y;
public function __construct($x, $y) {
$this->x = $x;
$this->y = $y;
}
}
// Таза эмес функция (берилген объектти өзгөртөт)
function moveMutablePoint(MutablePoint $point, $dx, $dy) {
$point->x += $dx;
$point->y += $dy;
}
$mutablePoint = new MutablePoint(0, 0);
moveMutablePoint($mutablePoint, 1, 1);
// $mutablePoint азыр (1, 1) - абал өзгөрдү функциядан тышкары
// Иммутабел объект
final class ImmutablePoint {
private $x;
private $y;
public function __construct($x, $y) {
$this->x = $x;
$this->y = $y;
}
public function getX(): int {
return $this->x;
}
public function getY(): int {
return $this->y;
}
// Метод возвращает ЖАҢЫ объект, ал эми учурдагыны өзгөртпөйт
public function move($dx, $dy): self {
return new self($this->x + $dx, $this->y + $dy);
}
}
// Таза функция (иммутабел объекттер менен иштейт)
function moveImmutablePoint(ImmutablePoint $point, $dx, $dy): ImmutablePoint {
return $point->move($dx, $dy);
}
$immutablePoint = new ImmutablePoint(0, 0);
$newImmutablePoint = moveImmutablePoint($immutablePoint, 1, 1);
// $immutablePoint калат (0, 0) - абал өзгөргөн жок
// $newImmutablePoint азыр (1, 1) - жаңы объект түзүлдү
Ошентип, иммутабел объекттерди колдонуу таза функцияларды түзүүнүн бир жолу болуп саналат, ал көбүрөөк алдын ала билүүгө, тестирлөөгө жана оңой колдоого мүмкүндүк берет.