ویرگول
ورودثبت نام
Mohammad Ghodsian
Mohammad Ghodsianمهندس نرم افزار و کارشناس ارشد مدیریت IT (کسب و کار الکترونیک)
Mohammad Ghodsian
Mohammad Ghodsian
خواندن ۹ دقیقه·۸ سال پیش

شروع برنامه نویسی با زبان دارت Dart - بخش اول

دارت یا همان Dart (در صورت علاقه میتوانید سایت رسمی این زبان را مشاهده نمایید) زبان برنامه نویسی ای است که حدود 6 سال از معرفی آن میگذرد، گوگل آن را توسعه میدهد و گفته میشود این زبان به عنوان راه حلی برای مشکلات موجود در جاوا اسکریپت (به‌طور مثال مشکل حافظه) معرفی شده است. نظرات متفاوتی در رابطه با این زبان و آینده ی آن مطرح شده که جای تأمل دارد. از تعریف و تمجیدها گرفته و استفاده در Flutter به عنوان نکات مثبت، تا ابراز تأسف برخی از برنامه نویسان و ابراز تعجب اشخاص معروفی در حوزه آی تی و برنامه نویسی بابت حمایت گوگل از توسعه ی این زبان نظیر Brendan Eich (کسی که جاواسکریپت را توسعه داد و در زمان نوشتن این مقاله دیدی منفی نسبت به این زبان مطرح کرده است).

اینکه نهایتاً سرنوشت این زبان چه خواهد شد و پیشبینی برخی که اعتقاد دارند در آینده برای توسعه ی نرم افزارها و خودِ سیستم عامل فیوژا Fuchsia استفاده خواهد شد یا خیر جای بحث دارد، اما بصورت کلی یادگیری زبانی که شروعش ساده است و شرکتی مانند گوگل از آن حمایت میکند برای برنامه نویسان (مخصوصاً اشخاصی که بخواهند در حال حاضر با کمک Flutter اقدام به توسعه ی نرم افزار های موبایل برای هر دو سیستم عامل اندروید و iOS نمایند) عملی توجیه پذیر است. به همین دلیل در ادامه با سینتکس این زبان آشنا خواهیم شد.

از آنجا که بهترین کار برای یادگیری یک زبان برنامه نویسی تمرین است، حین خواندن این مقاله میتوانید اینجا نمونه کدهای خود را تست کنید (که البته در زمان نوشتن این مقاله، با ip ایران کدنویسی در لینکِ گفته شده امکان پذیر نیست و مجبور به تغییر ip میباشد).

همچنین توجه کنید که این آموزش مربوط به نسخه 2.0.0 ورژن استیبل این زبان میباشد.


متغیرها Variables

با ابتدائی ترین موارد در هر زبان برنامه نویسی شروع میکنیم، متغیرها. تمامی متغیرها در دارت زیرمجموعه ی کلاس Object هستند.

در زبان دارت (همانند بسیاری از زبان های سطح بالا نظیر جاوااسکریپت، کاتلین، سوئیفت و...) هنگام تعریف یک متغیر نیازی نیست حتماً نوع آن را مشخص کرد و بصورت زیر میتوانید هر متغیری از هر نوعی تعریف کنید (در زبان دارت باید از سمیکالن یا همان ; استفاده کنید):

var myNubmer = 123; print(myNubmer); var myString = 'test'; print(myString);

در مثال های بالا با واژه var میگوییم یک متغیر داریم، پس از آن اسم متغیر، و در نهایت مقدار آن را مشخص میکنیم. اگر میخواهید انواع ثابتی از داده را تعریف کنید نگاهی به final و const بیندازید. بصورت خلاصه به شکل زیر میتوانید انواع ثابت را تعریف کنید:

final name = 'Mohammad'; final nickName = 'Misagh'; const age = 27; var foo = const []; final bar = const []; const baz = [];

انواع متغیر dynamic

نوع دیگری که در دارت وجود دارد dynamic میباشد. به این معنی که نوع خاصی برای آن در نظر گرفته نمیشود و میتواند هر نوعی از داده را داشته باشد:

dynamic testDynamic = 10; print(testDynamic); testDynamic = 'salam'; print(testDynamic); testDynamic = 12.5; print(testDynamic);

انواع متغیر صریح explicit types

در قسمت قبل متوجه شدیم میتوان بدون مشخص کردن نوع، یک متغیر تعریف کرد. حال اگر بخواهیم بصورت صریح مشخص کنیم که متغیر از چه نوعی باشد بصورت زیر میتوان این کار را انجام داد:

String str = 'test'; print(str);

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


انواع داده Data types

بصورت پیشفرض این زبان شامل انواع زیر میباشد:

اعداد Numbers

  • اعداد صحیح int شامل 64 بیت (زبان دارت در برخی موارد تبدیل به جاوااکریپت میشود که در این صورت این مقدار به رنج کوچکتری که جاوااکریپت ساپورت میکند کاهش میابد)
int x=1; // خط زیر مقدار عدد تعریف شده را نشان میدهد print(x);


int hex = 0xABEDA; // زبان دارت از اعداد هگز پشتیبانی میکند print(hex);


  • اعداد اعشاری double شامل 64 بیت
double y = 1.4; print(y);


double exponent = 1.24e-5; print(exponent);

هر دو نوع فوق زیرمجموعه ی نوعی به نام num میباشد. هنگام تعریف یک عدد میتوان آن را num تعریف کرد که هر دو مقدار صحیح و اعشاری را شامل میشود.

رشته Strings

رشته ها بصورت "..." یا '...' تعریف میشوند.

// single quotes var s1 = 'hello'; print(s1); // double quotes var s2 = "hi misagh" print(s2); // interpolation var y1 = 2; var z1 = 5; // میتوانید هر پارامتر، متغیر یا فرمولی را به این صورت در رشته مستقیماً بکار ببرید ${...} var sum = 'The sum is ${y1+z1*2}'; print(y1); // 2 print(z1); // 5 print(sum); // The sum is 12 // همچنین اگر با یک پارامتر کار داریم میتوانیم بدون هیچ آکولادی از مقدار پارامتر استفاده کنیم var number = 12; print('$number is a number'); // 12 is a number

کدهای زیر مثالی از تبدیل رشته و عدد است:

// Srring -> int var one = int.parse('1'); print(one); // 1 // اعمال محدودیت روی تعداد ارقام عدد اعشاری String pi = 3.1415.toStringAsFixed(2); print(pi); // 3.14

بولین Booleans

متغیرهای بولین شامل true یا false.

bool b1 = false; bool b2 = true; bool b3 = 3==4; bool b4 = b1==b1; bool b5 = b1==b2; print(b1); // false print(b2); // true print(b3); // false print(b4); // true print(b5); // false print(0==false); // false print(1==false); // false

لیست List

مثالی از تعریف یک لیست بصورت زیر میباشد:

var list = [1, 2, 3]; // element access print(l1[1]); // element assignment l1[2] = 9; // lenght print(l1.length); // insertion l1.add(55); // constant list var lConst = [1,2,3,4]; l2[2] = 20; // error l2.add(123); // error

در یک لیست میتان با صدا زدن (...)list.forEach عملیاتی را روی کل مقادیر انجام داد که در بخش توابع این مورد را خواهیم دید.

مپ Map

مپ ها مجموعه ای هستند از تعدادی عنصر کلید و مقدار ( keys and values ) که بصورت زیر تعریف میشوند:

var rates = { // Key: Value 'first': 'one', 'second': 'two', 'third': 'three' }; var numbers = { 1: 'one', 3: 'three' };

همچنین بصورت زیر نیز میتوان مپ ها را تعریف کرد:

var rates = Map(); // خط بالا یک شی از کلاس مپ ایجاد میکند. در ادامه ی آموزش با کلاس ها و اشیا آشنا خواهیم شد rates['first'] = 'one'; rates['second'] = 'two'; rates['fifth'] = 'five'; var numbers = Map(); numbers[1] = 'one'; numbers[3] = 'three'; // با اجرای خط زیر مقدار مرتبط با کلید 1 تغییر میکند numbers[1] = 'NEW ONE'; // اگر بصورت زیر تعریف کنیم نمیتوان مقدار کلیدی را تغییر داد final finalNumbers = const { 1: 'one', 3: 'three' }; var vcs = const[1, 'three'];

مثال دیگری از استفاده ی map ها را ببینیم:

// map creation var m1 = { 2:'test', 10:'hehe' }; var m2 = new Map(); print(m1); print(m2); // element access print(m1[2]); // test // missing keys print(m1[3]); // null // setting values m1[10] = 'changeTen'; m1[100] = 'changeHundred'; // length print(m1.length);

سایر موارد

خوب است به (Symbol (compile-time constants و Runes (رشته های UTF-32) هم نگاهی بندازید.


اپراتورها

دارت مثل اکثر زبانهای برنامه نویسی از اعمال اصلی پشتیبانی میکند. اجازه بدهید اولین کد کامل رو امتحان کنیم (تابع main شروع کننده ی برنامه هست، در مورد توابع در ادامه ی مقاله صحبت خواهیم کرد):

main(){ var a = 5; var b = 3; // add جمع print(a+b); // 8 // subtract تفریق print(a-b); // 2 // multiply ضرب print(a*b*0.5); // 7.5 // division تقسیم print(a/b); // 1.6666666666666667 // quotient خارج قسمت print(a ~/ b); // 1 // reminder باقیمانده print(a % b); // 2 // increment a++; ++a; print(a); // 7 }

برابری و رابطه

زبان دارت از اعمال برابری و رابطه ای پشتیبانی میکند. کد زیر را ببینیم:

main(){ var a = 5; var b = 3; // Equal برابری print(a==b); // Not equal نابرابری print(a!=b); // Less than کوچکتر print(a<b); // Less than or equal کوچکتر یا مساوی print(a>b); // Greater than بزرگتر print(a<=b); // Greater than or equal بزرگتر یا مساوی print(a>=b); }

بررسی نوع Type test operator

مواقع زیادی ممکن است نیاز داشته باشیم نوع یه متغیر را چک یا تبدیل کنیم. بصورت زیر میتوان این کار را انجام داد:

main(){ var list = ["hi", "hello"]; // is print(list is List<String>); // true // is! print(list is! String); // true print(list is! List<String>); // false // as print(list as List<String>); // [hi, hello] print((list as List<String>).length); // 2 print((list as int) + 4); // Error: Uncaught ... }

تخصیص Assignment

حالت عادی مقدار دهی را در کدهایی که تا کنون مرور کردیم، دیدیم. مثالی دیگر را بررسی میکنیم (از ویژگی های زبان دارت =?? است که عملکرد آن را خواهیم دید):

main(){ // assign num a = 5; print(a); // 5 // assign if null مقداردهی در صورتی که پارامتر مقداردهی نشده باشد var b; print(b); // null b ??= '6'; print(b); // 6 b ??= a; print(b); // 6 // compound assignment *= /= += -= ... a *= 2; print(a); // 10 }

عملگرهای منطقی Logical

دارت عملگرهای منطقی را نیز پشتیبانی میکند. مثالی از or، and و not را ببینیم:

main(){ // میتوان در یک خط چند متغیر تعریف کرد var a = true, b = false; // or print(a || b); // true // and print(a && b); // false // not print(!a); // false }

عملگرهای bitwise و shift

از دیگر ویژگی های زبان دارت، عملگرهای بیتی و شیفت میباشد. ببینیم این عملگرها به چه صورت تأثیر گذار خواهند بود:

main(){ var x = 1, y = 9; // Bitwise OR print(x | y); // 9 // Bitwise AND print(x & y); // 1 // Bitwise XOR print(x ^ y); // 8 // Bitwise NOT print(~x); // 4294967294 // Shift left print(1<<2); // 4 // Shift right print(3>>1); // 1 }

عملگرهای شرطی

زبان دارت از عملگرهای شرطی تک خطی نیز پشتیبانی میکند. دو نوع از پیاده سازی را بررسی میکنیم. یکی بصورت condition ? expr1 : expr2 (اگر condition برابر true بود expr1 و در صورت false بودن expr2) و دیگری بصورت expr1 ?? expr2 (اگر expr1 برابر null نبود خودش، در صورت null بودن expr2)

main(){ // condition ? expr1 : expr2 var numbers = [2,3,5]; // میتوانیم بفهمیم عضوی در یک آرایه وجود دارد یا خیر .contains print(numbers.contains(4) ? 'prime' : 'not prime'); // not prime print(numbers.contains(3) ? 'prime' : 'not prime'); // prime // expr1 ?? expr2 var nobleGases = { 2:'helium', 10:'neon', 18:'aragon' }; print(nobleGases[2] ?? 'not a noble gas'); // helium print(nobleGases[3] ?? 'not a noble gas'); // not a noble gas }

جریان کنترل Control Flow

در این قسمت میخواهیم شرط ها و حلقه ها و یا به عبارتی روند کنترل جریان را در دارت بررسی کنیم.

شرط if-else

در زبان دارت میتوان هم بصورت if بدون else و هم بصورت if همراه با else و هم بصورت ترکیبی و تو در تو شرط ها را پیاده سازی کرد. برای مثال:

var x = 5; if(x<5){ print('less than 5'); }else if (x<10){ print('less than 10'); }else{ print('greater or equal to 7'); if(x%2==0){ //... }else{ //... } }

شرط switch-case

حالت دیگری از شرط ها، استفاده از switch-case میباشد:

switch(day){ case 'test': print('test'); break; // این عبارت برای اتمام کار در هر قسمت باید نوشته شود case 'testDay': print('testDay'); break; default: // اگر هیچ کدام از موارد بالا اجرا نشود این قسمت اجرا میشود print('noDay'); }

حلقه for

این زبان همانند اکثر زبانهای برنامه نویسی متعارف از حلقه ها پشتیبانی میکند. در مثال زیر یک لیست تعریف کرده و دو مدل for را بررسی میکنیم. یکی حالت standard و دیگری با استفاده از واژه ی کلیدی in:

var list = ['one', 'two', 'three']; // standard for for(var i=0; i<list.length; i++){ print('${list[i]} is shown'); } // for-in loop for(var number in list){ print('$number is a number'); }

حلقه های while و do-while

همانند سایر زبانها، تنها تفاوت میان دو حلقه، در این است که حلقه do-while حدأقل یکبار اجرا میشود و پس از آن قبل از هربار اجرای بدنه شرط چک میشود، در صورتی که حلقه ی while از همان ابتدا هربار قبل از اجرای بدنه، شرط را چک میکد.ساختار حلقه ی while به صورت زیر میباشد:

while(شرط){ // تا زمانی که شرط برقرار است بدنه اجرا میگردد }

مثالی از پیاده سازی حلقه while

// while loop var x=0; while(x<2){ print(x); x++; } // خروجی این حلقه نمایش اعداد 0 و 1 میباشد x=0; while(x<0){ print(x); x++; } // حلقه اجرا نمیشود

ساختار حلقه ی do-while به صورت زیر میباشد:

do{ // بدنه یکبار اجرا شده و تا زمانی که شرط برقرار است مجدد اجرا میگردد }while(شرط);

مثالی از حلقه ی do-while

// do-while loop var y=0; do{ print(y); y++; }while(y<5); // خروجی این حلقه نمایش اعداد 0 تا 4 میباشد y=0; do{ print(y); y++; }while(y<0); // حلقه فقط یکبار اجرا شده و عدد 0 نشاغن داده میشود

خروج یا ادامه ی حلقه break and continue

main(){ // break for(var i=1; i<10; i++){ if(i%5==0) break; // زمانی که شرط برقرار باشد از حلقه خارج میشویم print(i); } // اعداد 1 تا 4 نشان داده میشوند // continue for(var i=0; i<10; i++){ if(i%2==0) continue; // زمانی که شرط برقرار باشد ادامه ی این قسمت بدنه ی حلقه اجرا نشده و مرحله ی بعدی حلقه اجرا میشود print(i); } // اعداد فرد 1 تا 9 نشان داده میشوند }

تا اینجا با مقدمات زبان دارت، متغیرها، انواع داده، عملگرهای اصلی و کنترل جریان این زبان آشنا شدیم. ادامه ی این آموزش (توابع، کنترل خطا و کلاس ها) را میتوانید در شروع برنامه نویسی با زبان دارت Dart - بخش دوم مشاهده کنید.



منتشر شده در ویرگول توسط محمد قدسیان https://virgool.io/@mohammad.ghodsian

https://virgool.io/@mohammad.ghodsian/dart1-nfbaxk7nhvsa


آموزشزبانبرنامه نویسیدارتdart
۳۰
۱۷
Mohammad Ghodsian
Mohammad Ghodsian
مهندس نرم افزار و کارشناس ارشد مدیریت IT (کسب و کار الکترونیک)
شاید از این پست‌ها خوشتان بیاید