ডেভসংকেত

ডার্ট প্রোগ্রামিং

ডার্ট হলো টেক-জায়ান্ট গুগলের তৈরি একটি ক্লায়েন্ট অপটিমাইজড প্রোগ্রামিং ল্যাংগুয়েজ। বর্তমানে বহুল জনপ্রিয় ওপেন সোর্স সফটওয়্যার ডেভেলপমেন্ট কিট 'ফ্লাটার' এর মূল ভিত্তি হলো ডার্ট প্রোগ্রামিং ল্যাংগুয়েজ। এই Cheat-Sheet এর মাধ্যমে ডার্ট এর দৈনন্দিন প্রয়োজনীয় টপিকগুলোকে হাইলাইট করা হয়েছে।

কন্ট্রিবিউটর

  • shunjid

শেয়ার করুন

ভ্যারিয়েবল ও ডেটা টাইপ

  • ৬৪-বিট পূর্ণসংখ্যা

    int
  • ৬৪-বিট ফ্লোটিং পয়েন্ট সংখ্যা

    double
  • বুলিয়ান

    bool
  • পরিবর্তনশীল টাইপ ও ভ্যালু

    dynamic
  • অপরিবর্তনশীল টাইপ ও পরিবর্তনশীল ভ্যালু

    var
  • রান-টাইমে গণনাযোগ্য অপরিবর্তনশীল টাইপ ও অপরিবর্তনশীল ভ্যালু

    final
  • কম্পাইল-টাইমে গণনাযোগ্য অপরিবর্তনশীল টাইপ ও অপরিবর্তনশীল ভ্যালু

    const

স্ট্রিং

  • সিঙ্গেল কোটেশন

    'Dart is cool'
  • ডবল কোটেশন

    "Dart is cool"
  • স্ট্রিং ইন্টারপোলেশন

    print('Flutter docs: ${flutter_docs_url}');
  • কনক্যাট

    "Welcome, " + "back"

টাইপ কনভার্শন

  • স্ট্রিং থেকে ইন্টিজার

    int.parse('1')
  • স্ট্রিং থেকে ডবল

    double.parse('3.1415')
  • ইন্টিজার থেকে স্ট্রিং

    1.toString()
  • ডবল থেকে দশমিকের পর নির্দিষ্ট ঘর পর্যন্ত স্ট্রিং

    3.1415.toStringAsFixed(2)
  • স্প্লিট করে স্ট্রিং থেকে লিস্ট

    'Welcome back'.split(' ')  // ['Welcome', 'back']

লিস্টের আরো

  • লিস্ট ফোল্ডিং

    var x = [1,2,3].fold(5, (i, j) => i + j);
  • লিস্টের শেষে আরেকটা লিস্টের এলিমেন্টগুলি যোগ করা

    [1, 2, 3].followedBy([4, 5])
  • একটি কন্ডিশন লিস্টের যেকোনো একটি এলিমেন্টকে স্যাটিসফাই করে কিনা

    [71, 75, 81].any((elem) => elem > 80)
  • একটি কন্ডিশন লিস্টের সবগুলো এলিমেন্টকে স্যাটিসফাই করে কিনা

    [71, 75, 81].every((elem) => elem > 80)
  • লিস্টকে দৈবভাবে পুনর্বিন্যস্ত করা

    var list = [1, 2, 3]; list.shuffle();
  • সেট থেকে লিস্টে কনভার্শন

    List.from({1, 2, 3})
  • লিস্ট এক্সপান্ড

    [1, 3, 5].expand((i) => [i, ++i]).toList()  // [1, 2, 3, 4, 5, 6]
  • লিস্ট থেকে প্রথম n সংখ্যক এলিমেন্ট নেয়া

    [1, 3, 5, 7].take(2)
  • লিস্ট থেকে প্রথম n সংখ্যক এলিমেন্ট বাদে বাকিগুলো নেয়া

    [1, 3, 5, 7].skip(2)

কালেকশনঃ ম্যাপ

  • স্ট্রিং টু স্ট্রিং

    var doraemon = {'type':'Robot', 'cameFrom':'22nd century', 'friend':'Nobita'};
  • ম্যাপকে এক্সেস করা

    doraemon['type']
  • ম্যাপে একটি কী-(Key) এর অস্তিত্ব আছে কিনা

    doraemon.containsKey('cameFrom')
  • ম্যাপে একটি ভ্যালুর অস্তিত্ব আছে কিনা

    doraemon.containsValue('Nobita')
  • ম্যাপের সকল কী প্রিন্ট করা

    doraemon.keys.forEach(print)
  • ম্যাপের সকল ভ্যালু প্রিন্ট করা

    doraemon.values.forEach(print);
  • ম্যাপের কী এবং ভ্যালুগুলোর ওপর ইটারেশন

    doraemon.forEach((k, v) => print('Key : $k, Value : $v'));

ফাংশান

  • অ্যারো দিয়ে এক-লাইনে ফাংশান

    int square(int n) => n*n;
  • পজিশনাল প্যারামিটার

    bool isEven(int n) => n%2==0;
  • ঐচ্ছিক নেইমড প্যারামিটার

    String chat(int positional, {int named}){ ... }
  • ঐচ্ছিক পজিশনাল প্যারামিটার

    String chat(int mandatory, [int optional]){ ... }
  • ডিফল্ট ভ্যালু

    String calculate({int a = 1}){ ... }
  • প্যারামিটার হিসেবে ফাংশান

    void go(int Function(int) move) { ... }

তারিখ ও সময়

  • বর্তমান তারিখ ও সময়

    DateTime.now()
  • বর্তমান বছর, মাস, দিন

    DateTime.now().year, DateTime.now().month, DateTime.now().day
  • বর্তমান সময়ঃ ঘন্টা, মিনিট, সেকেন্ড

    DateTime.now().hour, DateTime.now().minute, DateTime.now().second
  • আজকের "দিন ও সময়" থেকে কয়েক "দিন ও সময়" পরে

    DateTime.now().add(Duration(days: 3, hours: 9, minutes: 27))
  • একটি তারিখ আরেকটি তারিখের পরে কিনা

    DateTime.utc(2020, 12, 16).isAfter(DateTime.utc(2019, 03, 26))
  • একটি তারিখের 'বার/দিন' চেক করা

    DateTime.utc(2020, 03, 26).weekday == DateTime.sunday
  • দিনের হিসেবে দুটি তারিখের পার্থক্য

    DateTime.utc(2020, 12, 16).difference(DateTime.utc(2020, 03, 26)).inDays
  • স্ট্রিং থেকে ডেট-টাইমে কনভার্ট করা

    var parsedDate = DateTime.parse('1971-12-16 00:00:00.000');

অপারেটর

  • গতানুগতিক গাণিতিক অপারেটর

    +, -, *, /, %, ~/
  • অ্যাসাইনমেন্ট অপারেটর

    =, *=, /=, +=, -=, &=, ^=
  • তুলনামূলক অপারেটর

    ==, !=, <, >, <=, >=
  • লজিক্যাল অপারেটর

    &&, ||, !
  • ভ্যালু রিটার্ন করে ইনক্রিমেন্ট/ডিক্রিমেন্ট

    x++, x--
  • ইনক্রিমেন্ট/ডিক্রিমেন্ট করে ভ্যালু রিটার্ন করা

    ++x, --x
  • টাইপ টেস্টিং অপারেটর

    is, is!
  • টাইপ কাস্ট ও লাইব্রেরী প্রিফিক্স অপারেটর

    as
  • নাল কিনা

    ??
  • বিট লজিক্যাল অপারেটর অথবা, বিটওয়াইজ অপারেটর

    &, |, ^, <<, >>

স্ট্রিং মেথড ও প্রপার্টিজ

  • তুলনা করা

    'abc'.compareTo('def')
  • একটি স্ট্রিং এর মধ্যে একটি অক্ষর খোঁজা

    'John Doe Jahangir'.contains('Doe')
  • একটি স্ট্রিং একটি নির্দিষ্ট অক্ষর দিয়ে শেষ হয় কিনা

    'yoDevs'.endsWith('evs')
  • একটি স্ট্রিং একটি নির্দিষ্ট অক্ষর দিয়ে শুরু হয় কিনা

    'yoDevs'.startsWith('yo')
  • একটি স্ট্রিং এর মধ্যে কোনো একটি বর্ণ/অক্ষর এর সর্বশেষ অবস্থান খোঁজা

    'yoDevs'.lastIndexOf('D')
  • সাব-স্ট্রিং

    'my_name_is_khan'.substring(11,15)
  • শুরু ও শেষে সব অতিরিক্ত ফাঁকা স্পেস সরিয়ে দেয়া

    '  cats are cute  '.trim()
  • একটি বর্ণ/যতিচিহ্ন/অক্ষরকে স্ট্রিং এর সকল জায়গায় অন্য একটি বর্ণ/যতিচিহ্ন/অক্ষর দিয়ে প্রতিস্থাপন করা

    'cats arE cutE'.replaceAll('E','e')
  • স্ট্রিং এর দৈর্ঘ্য

    'cat'.length
  • একটি স্ট্রিং খালি কিনা

    ''.isEmpty

কালেকশনঃ লিস্ট

  • স্প্রেড অপারেটর

    ['apple', 'orange', ...otherList]
  • নাল স্প্রেড অপারেটর

    ['apple', 'orange', ...?otherList]
  • ম্যাপ করে ট্রান্সফর্মেশন

    [79,84,99].map((marks) => marks + 1).toList()  // [80, 85, 100]
  • এলিমেন্ট ফিল্টার করা

    [79,84,99].where((marks) => marks>80)  // (84, 99)
  • রিডিউস করা

    [80,80,80].reduce((v, e) => v + e)  // 240
  • কালেক্ট থ্রু কন্ডিশান

    var grade = [if(isPublished) 'A+', 'B+']
  • কালেক্ট থ্রু ইটারেশন

    [ 79, for (var i in [80, 81]) i , 82]

কালেকশনঃ সেট

  • নির্দিষ্ট টাইপের ফাঁকা সেট

    <int>{}
  • এডিশন/রিমুভ করা

    add(10), remove(10)
  • লিস্ট থেকে সেটে এলিমেন্ট এডিশন

    addAll([1, 2, 3, 4])
  • দুটি সেটের মধ্যে প্রতিচ্ছেদ করা

    {1, 2, 3}.intersection({3, 4, 5})
  • দুটি সেটের সাধারণ উপাদানগুলো একত্রিত করা

    {1, 2, 3}.union({3, 4, 5})

অ্যাসিনক্রোনাস প্রোগ্রামিং

  • অপারেশন রিপ্রেজেন্টেশানঃ ফিউচার

    Future<void> asyncTask() => Future.delayed(Duration(seconds: 2), () => print('It takes 2 seconds'));
  • অ্যাসিনক্রোনাস ফাংশান ও রিটার্ন টাইপ

    Future<String> getMessage() async { ··· }
  • অ্যাসিনক্রোনাস ফাংশান কে কল করা

    await getMessage()
  • অ্যাসিনক্রোনাস ফাংশানঃ এরোর হ্যান্ডলিং-১

    Future<String> login() async { try{...} catch(error){...} }
  • অ্যাসিনক্রোনাস ফাংশানঃ এরোর হ্যান্ডলিং-২

    Future<void> asyncTask() => Future.delayed(Duration(seconds: 2), () => throw '404 not found'));

কন্ট্রোল ফ্লো

  • হোয়াইল লুপ

    while(condition) { ... }
  • ডু হোয়াইল লুপ

    do { ... } while(condition);
  • কন্ডিশন-একশান ফর লুপ

    for(condition) { ... }
  • লিস্ট এক্সেসের জন্য ফর লুপ

    for(var elements in list) { ... }
  • ফর-ইচ লুপের সাথে আর্গুমেন্ট হিসেবে ফাংশান

    [1, 2, 3, 4].forEach(print);
  • সেটকে ফর-ইচ দিয়ে এক্সেস করা

    Set.from([1, 2, 3]).forEach((element) => print(element)); 

অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং

  • ক্লাস

    class BirthCertificate { ... }
  • ক্লাস প্রপার্টিজ

    class BirthCertificate { String name; int age; }
  • শর্ট ফর্মের ডিফল্ট কন্স্ট্রাক্টর

    BirthCertificate(this.name, this.age);
  • নেইমড কন্স্ট্রাক্টর ও ডিফল্ট কন্স্ট্রাক্টরকে কল করা

    BirthCertificate.newBornBaby(String onlyName) : this(onlyName, 0);
  • গেটার

    String get getInfo { ... }
  • সেটার

    set setInfo(String info) { ... }
  • এবস্ট্রাক্ট ক্লাস

    abstract class Person { ... }
  • মিক্সিন ডেফিনিশান

    mixin Engineer { ... }
  • এবস্ট্রাক্ট ক্লাস ইনহেরিট করা ও মিক্সিনের ব্যাবহার

    class Programmer extends Person with Engineer { ... }