برنامه نویسی

معرفی عملی بارگذاری بیش از حد اپراتور در دارت

معرفی

بارگذاری بیش از حد اپراتور یک مفهوم و ویژگی کاملاً قدرتمند، محبوب و رایج در دنیای شی گرا است. برای افرادی که با آن آشنایی ندارند، به توسعه دهندگان این امکان را می دهد تا رفتار عملگرهای استاندارد (+،-،٪ و غیره) را هنگامی که روی اشیاء ایجاد شده توسط کاربر استفاده می شوند، بازتعریف و سفارشی کنند.
چندین زبان شی گرا (مانند Dart، Java، C++،…) با پشتیبانی داخلی از آن ارائه می شوند.

در برنامه نویسی سنتی، این عملگرها برای کار با انواع داده های داخلی مانند اعداد صحیح، شناورها و رشته ها تعریف می شوند. با این حال، بارگذاری بیش از حد اپراتور به شما امکان می دهد رفتار این عملگرها را بر روی اشیاء خود تعریف کنید. برای مثال، اگر کلاسی دارید که اعداد مختلط را نشان می‌دهد، می‌توانید نحوه عملکرد عملگرهای جمع و تفریق را بر روی نمونه‌های آن کلاس تعریف کنید.

چگونه کار می کند

نحو

ClassRoom operator + (Object o){
  //Your logic here
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در اینجا چند نکته کلیدی در مورد نحو ذکر شده است:

  • کلمه کلیدی رزرو شده operator و عملگر خاصی که می خواهیم اضافه بار کنیم: عملگر پلاس در این مورد: +;
  • عملوندها: Object o عملوند سمت راست است و کلاسی که عملگر را روی آن اضافه بارگذاری می کنیم، سمت چپ است.
  • نوع بازگشت ClassRoom تابع باید برگردد.

اکنون که مفاهیم و نحو به وضوح تعریف شده است، اجازه دهید به یک مثال عملی برسیم. بیایید فرض کنیم یک کلاس درس با تعدادی دانش آموز داریم که می خواهیم آنها را پیگیری کنیم. ما همچنین می خواهیم دانش آموزان جدیدی را به کلاس اضافه کنیم.

ما باید یک کلاس برای نمایندگی داشته باشیم ClassRoom و یکی دیگر برای User.

class ClassRoom {
  final List<Student> students;

  ClassRoom(this.students);
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

class Student {
  final String name;
  final int age;

  Student(this.name, this.age);

  @override
  String toString() {
    return 'Student{name: $name age: $age}';
  }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بیایید عملگر + را بیش از حد بارگذاری کنیم تا مورد استفاده ما قرار گیرد.

ClassRoom operator + (List<Student> others){
    List<Student> students = [this,...others];
    return ClassRoom(students);
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

حالا مال شما Student کلاس باید به شکل زیر باشد:

class Student {
  final String name;
  final int age;

  Student(this.name, this.age);

  ClassRoom operator + (List<Student> others){
    List<Student> students = [this,...others];
    return ClassRoom(students);
  }

  @override
  String toString() {
    return 'Student{name: $name, age: $age}';
  }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • کلمه کلیدی رزرو شده operator و عملگر خاصی که می خواهیم اضافه بار کنیم: عملگر پلاس در این مورد: +;
  • نوع بازگشت ClassRoom، دانش آموز فعلی را به لیست دانش آموزان اضافه می کنیم و آن را برمی گردانیم.

از این به بعد، هر بار می توانیم از عملگر plus مانند زیر استفاده کنیم:

ClassRoom classRoom =  Student("Andrew",20) + [Student("John",14) ,  Student("Jane", 13)] ;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

و اگر چاپ کنیم classRoom شی، باید دریافت کنیم:

[Student{name: Andrew, age: 20}, Student{name: John, age: 14}, Student{name: Jane, age: 13}]
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مثالی دیگر

حالا بیایید بخواهیم دانش آموز بزرگتر کلاس را بدست آوریم. این باعث می شود که اپراتور دیگری را بیش از حد بارگذاری کنیم، ممکن است > یا < بسته به ترجیح شما ما با > برای سادگی.

Student operator > (Student other){
    return age > other.age ? this : other;
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نحو تقریباً یکسان است.

  • کلمه کلیدی رزرو شده operator و اپراتور خاص که بیش از حد بارگذاری شده است >;
  • نوع بازگشت Student، می خواهیم مسن ترین دانش آموز را برگردانیم، بنابراین سن دانش آموز فعلی را با رفیقش مقایسه می کنیم و بزرگ ترین را برمی گردانیم.

اکنون می توانیم از عملگر خود مانند زیر استفاده کنیم:

Student oldest= classRoom.students.reduce((prev, student)=> prev > student );

روش کاهش یک لیست را بر اساس تابع ارائه شده به یک مقدار کاهش می دهد. مسن ترین دانش آموز کلاس را برمی گردانیم.

اگر چاپ کنیم oldest، باید نتیجه مورد انتظار را بدست آوریم:

Student{name: Andrew, age: 20}

نتیجه

با مثال‌های بالا، دیدیم که بارگذاری بیش‌ازحد اپراتور چقدر قدرتمند است و خواندن آن چقدر مختصر و آسان‌تر می‌تواند کد ما را با استفاده از عملگرهای آشنا با اشیاء سفارشی‌مان بسازد. با این حال، مهم است که از بارگذاری بیش از حد اپراتور با احتیاط و با دقت استفاده کنید، زیرا ممکن است به کدهایی منجر شود که درک و نگهداری آن در صورت استفاده بیش از حد یا استفاده نادرست دشوار است.
برای دریافت منابع بیشتر می توانید به لینک های زیر مراجعه کنید:

قدردانی

از نویسنده این مقاله تشکر می کنم زیرا او از من الهام گرفته است.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

همچنین ببینید
بستن
دکمه بازگشت به بالا