PHP – تکرارپذیری (Iterables)

Iterable چیست؟ (What is an Iterable?)

Iterable هر مقداری است که بتوان با یک حلقه foreach() آن را پیمایش کرد.

نوع شبه (pseudo-type) iterable در PHP 7.1 معرفی شد و می‌توان از آن به عنوان نوع داده‌ای برای آرگومان‌های تابع و مقادیر بازگشتی تابع استفاده کرد.

استفاده از Iterables (Using Iterables)

کلمه کلیدی iterable می‌تواند به عنوان نوع داده‌ای یک آرگومان تابع یا به عنوان نوع بازگشتی تابع استفاده شود:

مثال (Example)

استفاده از آرگومان تابع iterable:

<?php
function printIterable(iterable $myIterable) {
  foreach($myIterable as $item) {
    echo $item;
  }
}
$arr = ["a", "b", "c"];
printIterable($arr);
?>

مثال (Example)

بازگرداندن یک iterable:

<?php
function getIterable():iterable {
  return ["a", "b", "c"];
}
$myIterable = getIterable();
foreach($myIterable as $item) {
  echo $item;
}
?>

ایجاد Iterables (Creating Iterables)

آرایه‌ها (Arrays)

تمام آرایه‌ها iterable هستند، بنابراین هر آرایه‌ای می‌تواند به عنوان آرگومان یک تابع که به iterable نیاز دارد، استفاده شود.

Iterators

هر شیئی که رابط (interface) Iterator را پیاده‌سازی کند، می‌تواند به عنوان آرگومان یک تابع که به iterable نیاز دارد، استفاده شود.

یک iterator حاوی یک لیست از آیتم‌ها است و متدهایی برای پیمایش از میان آن‌ها فراهم می‌کند. این یک اشاره‌گر به یکی از عناصر لیست نگه می‌دارد. هر آیتم در لیست باید یک کلید داشته باشد که بتوان با استفاده از آن آیتم را پیدا کرد.

یک iterator باید این متدها را داشته باشد:

  • current(): عنصری را که اشاره‌گر در حال حاضر به آن اشاره می‌کند، بازمی‌گرداند. این می‌تواند هر نوع داده‌ای باشد.
  • key(): کلیدی را که با عنصر فعلی در لیست مرتبط است، بازمی‌گرداند. این تنها می‌تواند یک عدد صحیح (integer)، شناور (float)، بولین (boolean) یا رشته (string) باشد.
  • next(): اشاره‌گر را به عنصر بعدی در لیست منتقل می‌کند.
  • rewind(): اشاره‌گر را به اولین عنصر در لیست منتقل می‌کند.
  • valid(): اگر اشاره‌گر داخلی به هیچ عنصری اشاره نکند (برای مثال، اگر next() در انتهای لیست فراخوانی شده باشد)، باید false برگرداند. در هر حالت دیگر true را برمی‌گرداند.

مثال (Example)

پیاده‌سازی رابط Iterator و استفاده از آن به عنوان یک iterable:

<?php
// ایجاد یک Iterator
class MyIterator implements Iterator {
  private $items = [];
  private $pointer = 0;
  public function __construct($items) {
    // array_values() اطمینان حاصل می‌کند که کلیدها اعداد هستند
    $this->items = array_values($items);
  }
  public function current() {
    return $this->items[$this->pointer];
  }
  public function key() {
    return $this->pointer;
  }
  public function next() {
    $this->pointer++;
  }
  public function rewind() {
    $this->pointer = 0;
  }
  public function valid() {
    // count() نشان می‌دهد که چند آیتم در لیست هستند
    return $this->pointer < count($this->items);
  }
}
// یک تابع که از iterables استفاده می‌کند
function printIterable(iterable $myIterable) {
  foreach($myIterable as $item) {
    echo $item;
  }
}
// استفاده از iterator به عنوان یک iterable
$iterator = new MyIterator(["a", "b", "c"]);
printIterable($iterator);
?>

خلاصه

iterable ها در PHP قابلیت پیمایش با حلقه foreach() را دارند و می‌توانند به عنوان نوع داده‌ای برای آرگومان‌ها و مقادیر بازگشتی توابع استفاده شوند. آرایه‌ها و iteratorها نمونه‌هایی از iterableها هستند. iteratorها باید متدهای خاصی را پیاده‌سازی کنند تا بتوانند به عنوان iterable عمل کنند.

پست های مرتبط

مطالعه این پست ها رو از دست ندین!
JavaScript - آرایه‌ها (Arrays)

JavaScript – آرایه‌ها (Arrays)

آرایه در جاوااسکریپت متغیری خاص است که می‌تواند بیش از یک مقدار را ذخیره کند. const cars = ["Saab",...

بیشتر بخوانید
JavaScript - ویژگی‌های عدد (Number Properties)

JavaScript – ویژگی‌های عدد (Number Properties)

در جاوااسکریپت، شیء Number شامل ویژگی‌هایی از پیش تعریف‌شده است که برای کار با اعداد مفید هستند. این ویژگی‌ها...

بیشتر بخوانید
JavaScript - متدهای عدد (Number Methods)

JavaScript – متدهای عدد (Number Methods)

در جاوا اسکریپت، متدهایی برای کار با اعداد ارائه شده‌اند که می‌توانند روی تمامی اعداد استفاده شوند. متدهای مربوط...

بیشتر بخوانید

نظرات

سوالات و نظراتتون رو با ما به اشتراک بذارید

برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید.