از Java به Dart – کلاس و Constructor
در سری مقالات از«جاوا(Java)» به «دارت(Dart)» قصد داریم به آموزش برنامه نویسی به زبان «دارت» بپردازیم. همچنین در این سری آموزشها سعی میکنیم قسمت های متناظر برنامه نویسی جاوا در دارت را شرح دهیم. بدین صورت درک مفاهیم و سرعت آموزش برای توسعه دهندگانی که پیشتر با زبانهای برنامه نویسی شی گرا آشنا بودند، آسانتر خواهد شد.
Class
در جاوا هر قطعه کد در یک کلاس قرار میگیرد. اما در دارت الزاما اینگونه نیست؛ برای ساختن یک کلاس در دارت میتوان از کلمه کلیدی class استفاده کرد:
نمونه کد جاوا: Person.java
class Person { }
نمونه کد دارت: person.dart
class Person { }
توجه داشته باشید که نام گذاری در جاوا به صورت Upper Camel Case است. اما اسم فایل ها دردارت به صورت lower case است و کلمات با «ــ» از یکدیگر جدا میشوند. اما نام کلاس در هنگام پیاده سازی در هر دو کلاس به صورت Upper Camel Case است. برای مثال کلاس admin user در جاوا به این صورت نوشته میشود : AdminUser.java
class AdminUser { }
و در Dart به این صورت نوشته میشود: admin_user.dart
class AdminUser { }
Constructor
زمانی که یک instance از روی یک کلاس میسازیم متد Constructor اولین متدی که فراخوانی میشود. نمونه constructor در جاوا به این صورت است:
class Person { public Person() { } }
و یک constructor خالی در دارت میتواند به این صورت باشد:
class Person { Person(); }
همچنین میتوان به این صورت نیز در دارت نوشت:
class Person { Person() { } }
در دارت بهتراست متدی که بدنه ندارد و خالی است به «;» ختم شود.
در جاوا برای مقداردهی به بعضی متغیرها درConstructor به این صورت عمل می کنیم:
class Person { String firstName; String lastName; int code; public Person(String firstName, String lastName, int code) { this.firstName = firstName; this.lastName = lastName; this.code = code; } }
و در دارت به این صورت عمل می کنیم:
class Person { String firstName; String lastName; int code; Person(this.firstName, this.lastName, this.code); }
در زبان دارت با استفاده از کلمه کلیدی this میتوان پارامتر ورودی را با متغیر درون کلاس متصل (bind) کرد. توجه داشته باشید برای ایجاد اتصال باید نام متغیرها و پارامترهای ورودی کلاس یکسان باشند و پیش از نام هر متغیر از کلمه this استفاده کنید. البته میتوان کد بالا را نبز به صورت زیر در زبان دارت پیاده کرد:
class Person { String firstName; String lastName; int code; Person(firstName, lastName, code) { this.firstName = firstName; this.lastName = lastName; this.code = code; } }
همچنین زبان دارت دو ویژگی دیگر نسبت به زبان جاوا دارد. اولین ویژگی آن «انتخابی بودن» متغیرها است. برای مثال در کد بالا ممکن است هنگام فراخوانی کلاس Person مقدار code برابر null باشد. با توجه به انتخابی بودن متغیردر دارت از مقدار دهی به این متغیر در هنگام ایجاد کلاس صرف نظر کنیم:
class Person { String firstName; String lastName; int code; Person(this.firstName, this.lastName, [this.code]); } Person p = Person('a','b');
درقطعه کد بالا مقدار code برابر null است. این در حالی ست که در جاوا برای ساختن یک instance از این کلاس باید به صورت زیرعمل کنیم:
class Person { String firstName; String lastName; int code; public Person(String firstName, String lastName, int code) { this.firstName = firstName; this.lastName = lastName; this.code = code; } } public static void main(String[] args) { Person person = new Person("a", "b", 0); }
در زبان دارت میتوان اولویت مقدار دهی بعضی از متغیر ها را جابجا کرد. اگر کلاس person را به این صورت تعریف کنیم:
class Person { String firstName; String lastName; int code; int secondCode; Person({this.firstName, this.lastName, this.code = 0, this.secondCode}); } Person p = Person(); Person p1 = Person(firstName: 'a'); Person p2 = Person(secondCode: 1, firstName: 'c'); Person p3 = Person(code: 2, lastName: 'c');
همان طور که در کد بالا می بینید متغیرها انتخابیاند و نیز میتوان ترتیب مقداردهی آن ها را تغییر داد. البته باید برای مفدار دهی به هریک از متغیرها نام آن را مشخص کنیم.
در زبان دارت میتوانیم برای Constructor ها نیز نام مشخص کنیم. برای مثال میتوان چنین نوشت:
class Person { String firstName; String lastName; int code; int secondCode; Person({this.firstName, this.lastName, this.code = 0, this.secondCode}); Person.withName(this.firstName, this.lastName) { this.code = 100; this.secondCode = 200; } } Person person = Person.withName('name', 'last name');
همانطور که مشاهده میکنید یک Constructor با اسم withName برای این کلاس ایجاد کردهایم که به هنگام فراخوانی میتوان به صورتی که در کد نشان داده شده است٬ استفاده شود. زبان Dart این ویژگی را اضافه کرده است تا هر Constructor غیز از Constructor اصلی به این صورت نوشته شود. برای مثال اگر چنین کدی بنویسیم:
class Person { String firstName; String lastName; int code; int secondCode; Person({this.firstName, this.lastName, this.code = 0, this.secondCode}); Person(this.firstName, this.lastName, this.code, this.secondCode); Person.withName(this.firstName, this.lastName) { this.code = 100; this.secondCode = 200; } }
یکی از دو متدی پیش فرض باید حذف شود. بر خلاف زبان جاوا که Overloading بر روی constructor ها متداول است، در زبان دارت تنها یک Constructor به صورت پیش فرض (هم نام با نام کلاس) میتواند داشته باشد و باقی Constructor ها باید اسم مخصوص به خود را داشته باشد.
در این مقاله سعی بر این شد با کلاس در زبان دارت آشنا شویم.
با ما همراه باشید.
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.