با عرض سلام خدمت کاربران محترم سایت پی وی لرن.
با جلسه ای دیگر از سری جلسات دوره آموزش زبان برنامه نویسی دارت Dart در خدمت شما هستیم.
در این جلسه قصد داریم به آموزش استفاده از کتابخانه ها در زبان دارت Dart بپردازیم.
یک کتابخانه در زبان های برنامه نویسی، شامل مجموعه ای از کلاس ها و توابع میباشد.
زبان دارت نیز دارای مجموعه ای از کتابخانه های بسیار مفید برای ایجاد برنامه ها است.
یک کتابخانه زبان دارت شامل مجموعه ای از کلاس ها، توابع، ثابت ها، typedef ها، property ها و exception ها میباشد.
import یا وارد کردن یک کتابخانه، باعث ایجاد دسترسی به کامپوننت ها و اعضای آن کتابخانه در فایلی که آن کتابخانه را وارد کرده است، میشود.
از کلمه کلیدی import برای وارد کردن یک کتابخانه استفاده میکنیم. یک فایل میتواند چندین کتابخانه را import کند.
کتابخانه های خود زبان دارت به صورت dart:library_name وارد میشوند.
گرامر وارد کردن یک کتابخانه به صورت زیر است: (URI مسیر کتابخانه است)
1 | import 'URI' |
مثال:
1 2 | import 'dart:io' import 'package:lib1/libfile.dart' |
در جدول زیر تعداد از کتابخانه های داخلی زبان دارت را معرفی کرده ایم:
توضیحات | کتابخانه |
فایل، سوکت، HTTP و سایر ورودی و خروجی های پشتیبانی شده در برنامه های سمت سرور. این کتابخانه به صورت پیشفرض وارد شده و در برنامه های برپایه مرورگر کار نمیکند | dart:io |
این کتابخانه شامل انواع داده های موجود در زبان دارت، کالکشن ها و هر عملکرد اصلی دیگر برای برنامه ها است. این کتابخانه نیز به صورت پیشفرض در تمام برنامه ها وارد میشود | dart:core |
این کتابخانه شامل ثابت ها و توابع ریاضی میباشد | dart:math |
این کتابخانه شامل انکدرها و دیکدرها برای تبدیل داده ها بین فرمت های مختلف مانند JSON و UTF-8 است | dart:convert |
این کتابخانه شامل لیست هایی است که داده های اندازه ثابت را به صورت کارآمد کنترل میکند | dart:typed_data |
در مثال زیر کتابخانه dart:math را در برنامه import کرده و با استفاده از تابع ()sqrt این کتابخانه، جذر عدد ۳۶ را نمایش میدهیم.
1 2 3 4 | import 'dart:math'; void main() { print("Square root of 36 is: ${sqrt(36)}"); } |
خروجی:
1 | Square root of 36 is: 6.0 |
علاوه بر کتابخانه های خود زبان دارت، میتوانیم کتابخانه های دلخواه خود را ایجاد کنیم.
ساخت یک کتابخانه بسیار ساده است. تنها کافیست تا در ابتدای فایل از دستور library و سپس نام کتابخانه استفاده کنید.
گرامر:
1 2 | library library_name // محتوای کتابخانه |
برای import کردن این نوع کتابخانه ها نیاز به مسیری که کتابخانه در آن قرار گرفته است، داریم.
1 | import 'dir/library_name' |
در مثال زیر یک کتابخانه به نام calculator_lib ایجاد کرده ایم که شامل تعدادی تابع محاسباتی میباشد.
همچنین در این کتابخانه از کتابخانه dart:math نیز استفاده کرده ایم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | library calculator_lib; import 'dart:math'; //import statement after the libaray statement int add(int firstNumber,int secondNumber){ print("inside add method of Calculator Library ") ; return firstNumber+secondNumber; } int modulus(int firstNumber,int secondNumber){ print("inside modulus method of Calculator Library ") ; return firstNumber%secondNumber; } int random(int no){ return new Random().nextInt(no); } |
حال در برنامه زیر از کتابخانه بالا استفاده میکنبم:
1 2 3 4 5 6 7 8 9 10 11 12 | import 'calculator.dart'; void main() { var num1 = 10; var num2 = 20; var sum = add(num1,num2); var mod = modulus(num1,num2); var r = random(10); print("$num1 + $num2 = $sum"); print("$num1 % $num2= $mod"); print("random no $r"); } |
خروجی:
1 2 3 4 5 | inside add method of Calculator Library inside modulus method of Calculator Library 10 + 20 = 30 10 % 20= 10 random no 0 |
اگر در کتابخانه شما تابع، کلاس، متغیر و … هر چیز دیگری وجود دارد که نمیخواهید توسط برنامه مبدا فراخوانی شود و مورد استفاده قرار گیرد، از پیشوند _ در نام ان ها استفاده کنید.
برای مثال در کتابخانه زیر تابع log نمیتواند توسط هیچ برنامه ای فراخوانی شود.
1 2 3 4 | library loggerlib; void _log(msg) { print("Log method called in loggerlib msg:$msg"); } |
برنامه زیر را در نظر بگیرید:
1 2 3 4 | import 'test.dart' as web; void main() { web._log("hello from webloggerlib"); } |
اگر برنامه بالا کامپایل شود، خطای زیر را دریافت میکنیم:
1 2 3 4 5 6 7 8 9 | Unhandled exception: No top-level method 'web._log' declared. NoSuchMethodError: method not found: 'web._log' Receiver: top-level Arguments: [...] #0 NoSuchMethodError._throwNew (dart:core-patch/errors_patch.dart:184) #1 main (file:///C:/Users/Administrator/WebstormProjects/untitled/Assertion.dart:6:3) #2 _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:261) #3 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:148) |
فرض کنید دو کتابخانه در برنامه خود وارد کرده اید که این دو کتابخانه یک تابع همنام دارد.
حال کامپایلر از کجا باید بداند که شما تابع کدام کتابخانه را فراخوانی کرده اید؟
استفاده از یک پیشوند (Prefix) این مشکل را حل میکند.
دو کتابخانه زیر را در نظر بگیرید.
1 2 3 4 | library loggerlib; void log(msg){ print("Log method called in loggerlib msg:$msg"); } |
1 2 3 4 | library webloggerlib; void log(msg){ print("Log method called in webloggerlib msg:$msg"); } |
هر دو کتابخانه بالا یک تابع همنام دارند.
در برنامه زیر یک پیشوند یا برچسب به نام “web” را به کتابخانه دوم اختصاص میدهیم.
حال برای استفاده از این کتابخانه باید از این پیشوند استفاده کنیم.
مثال:
1 2 3 4 5 6 7 | import 'loggerlib.dart'; import 'webloggerlib.dart' as web; void main(){ log("hello from loggerlib"); web.log("hello from webloggerlib"); } |
خروجی:
1 2 | Log method called in loggerlib msg:hello from loggerlib Log method called in webloggerlib msg:hello from webloggerlib |
جلسه آموزش استفاده از کتابخانه ها در زبان دارت نیز به پایان رسید.
در جلسه بعد به اموزش برنامه نویسی غیر همزمان در زبان دارت خواهیم پرداخت.