PHP'de Ağır İşlemlerin Tekrarını Optimize Etme

Önceki derste, fonksiyonların tekrarlanan çağrıları aslında çok az zaman alıyordu ve bizim optimizasyonumuz çok fazla tasarruf sağlamıyordu. Ancak, yeterince uzun süre çalışan "ağır" bir fonksiyonu birkaç kez çağırırsak, her şey çok daha kötü olacaktır.

Örneğin, bir sayının bölenlerini bulan bir fonksiyonumuz olduğunu varsayalım:

php<?php
  function getDivisors($num) {
    $result = [];
    
    for ($i = 1; $i <= $num; $i++) {
      if ($num % $i == 0) {
        $result[] = $i;
      }
    }
    
    return $result;
  }
?>

Açıkçası, bu fonksiyon oldukça "ağır". Bu nedenle, şu şekilde bir kod yazmak kötü bir fikir olur:

php<?php
  $num = 123456;
  
  if (array_sum(getDivisors($num)) >= 10 and array_sum(getDivisors($num)) <= 100) {
    
  } else {
  
  }
?>

Elbette, "ağır" işlemi bir kez yapıp sonucu bir değişkene kaydetmek, ardından bu değişkeni gerekli yerlerde kullanmak daha iyidir:

php<?php
  $num = 123456;
  $sum = array_sum(getDivisors($num));
  
  if ($sum >= 10 and $sum <= 100) {
    
  } else {
  
  }
?>
Задание 1

Aşağıda verilen kodu optimize edin:

php<?php
  $num = 1233456789;
  
  if (getSumSquare($num) >= 10 and getSumSquare($num) <= 100) {
    echo 'doğru';
  } else {
    echo 'yanlış';
  }
  
  function getSumSquare($num) {
    $digits = explode('', $num);
    
    $sum = 0;
    foreach ($digits as $digit) {
      $sum += $digit * $digit;
    }
    
    return $digit;
  }
?>