ডার্ট বনাম সুইফট: একটি তুলনা

ডার্ট লোগোটি ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন 3.0 আনপোর্টেড লাইসেন্সের অধীনে লাইসেন্সযুক্ত।

ডার্ট এবং সুইফট আমার দুটি প্রিয় প্রোগ্রামিং ভাষা। আমি বাণিজ্যিক ও ওপেন সোর্স কোডগুলিতে এগুলি ব্যাপকভাবে ব্যবহার করেছি।

এই নিবন্ধটি ডার্ট এবং সুইফটের মধ্যে পাশাপাশি তুলনা করে এবং এর লক্ষ্য করে:

  • দুজনের মধ্যে পার্থক্য হাইলাইট করুন।
  • এক ভাষা থেকে অন্য ভাষাতে (বা উভয় ব্যবহার করে) বিকাশকারীদের জন্য উল্লেখ হয়ে উঠুন।

কিছু প্রসঙ্গ:

  • একটি একক কোডবেস থেকে সুন্দর নেটিভ অ্যাপ্লিকেশনগুলি তৈরির জন্য গুগলের কাঠামোটি ডার্ট শক্তিশালী ফ্লুর্ট করে।
  • আইওএস, ম্যাকোস, টিভিএস এবং ওয়াচওএস জুড়ে অ্যাপল এর এসডিকে শক্তি সরবরাহ করে।

নিম্নলিখিত তুলনাটি উভয় ভাষার মূল বৈশিষ্ট্যগুলিতে তৈরি করা হয়েছে (ডার্ট ২.১ এবং সুইফট ৪.২ অনুযায়ী)। প্রতিটি বৈশিষ্ট্যকে গভীরভাবে আলোচনা করা যেমন এই নিবন্ধের আওতার বাইরে, আমি যথাযথ যেখানে আরও পড়ার জন্য উল্লেখগুলি অন্তর্ভুক্ত করি।

সুচিপত্র

  • তুলনামূলক তালিকা
  • ভেরিয়েবল
  • অনুমান টাইপ করুন
  • পরিবর্তনীয় / অপরিবর্তনীয় পরিবর্তনশীল
  • ক্রিয়াকলাপ
  • নামযুক্ত এবং নামহীন পরামিতি
  • Ptionচ্ছিক এবং ডিফল্ট পরামিতি
  • বন্ধ
  • tuples
  • নিয়ন্ত্রণ প্রবাহ
  • সংগ্রহ (অ্যারে, সেট, মানচিত্র)
  • অযোগ্যতা এবং বিকল্পগুলি
  • ক্লাস
  • উত্তরাধিকার
  • প্রোপার্টি
  • প্রোটোকল / বিমূর্ত ক্লাস
  • Mixins
  • এক্সটেনশানগুলি
  • Enums
  • structs
  • শিল্প খাত
  • জেনেরিক্স
  • প্রবেশাধিকার নিয়ন্ত্রণ
  • অ্যাসিনক্রোনাস প্রোগ্রামিং: ফিউচার
  • অ্যাসিনক্রোনাস প্রোগ্রামিং: স্ট্রিম
  • স্মৃতি ব্যবস্থাপনা
  • সংকলন এবং সম্পাদন
  • অন্যান্য বৈশিষ্ট্যগুলি কভার করা হয়নি
  • আমার প্রিয় সুইফ্ট বৈশিষ্ট্যগুলি ডার্ট থেকে অনুপস্থিত
  • আমার প্রিয় ডার্ট বৈশিষ্ট্যগুলি সুইফ্ট থেকে অনুপস্থিত
  • উপসংহার
  • তথ্যসূত্র এবং ক্রেডিট

তুলনামূলক তালিকা

ভেরিয়েবল

পরিবর্তনীয় ডিক্লেয়ারেশন সিনট্যাক্সটি ডার্টে দেখে মনে হয়:

স্ট্রিং নাম;
বয়স বয়স;
দ্বিগুণ উচ্চতা;

এবং সুইফটে এটির মতো:

var নাম: স্ট্রিং
var বয়স: ইনট
ভার উচ্চতা: দ্বিগুণ

পরিবর্তনীয় সূচনাটি ডার্টে এর মতো দেখায়:

var name = 'Andrea';
var বয়স = 34;
var উচ্চতা = 1.84;

এবং সুইফটে এটির মতো:

var নাম = "Andrea"
var বয়স = 34
var উচ্চতা = 1.84

এই উদাহরণে ধরণের টীকাগুলির প্রয়োজন হয় না। এটি কারণ উভয় ভাষা অ্যাসাইনমেন্টের ডানদিকে অভিব্যক্তি থেকে প্রকারগুলি নির্ধারণ করতে পারে।

যার কথা…

অনুমান টাইপ করুন

টাইপ অনুমানের অর্থ হ'ল আমরা নিম্নলিখিতটিতে নিম্নলিখিতটি লিখতে পারি:

var আর্গুমেন্ট = {'আরজিএ': 'হ্যালো', 'আরজিবি': 42}; // মানচিত্র <স্ট্রিং, অবজেক্ট>

এবং যুক্তির ধরণটি স্বয়ংক্রিয়ভাবে সংকলক সমাধান করে by

সুইফটে, একইভাবে লেখা যেতে পারে:

var arguments = ["argA": "হ্যালো", "আরজিবি": 42] // [স্ট্রিং: যে কোনও]

আরও কিছু বিবরণ

ডার্টের জন্য ডকুমেন্টেশন উদ্ধৃত:

বিশ্লেষক ক্ষেত্র, পদ্ধতি, স্থানীয় ভেরিয়েবল এবং সর্বাধিক জেনেরিক ধরণের আর্গুমেন্টের জন্য ধরণগুলি নির্ধারণ করতে পারে। বিশ্লেষকের কাছে যখন নির্দিষ্ট ধরণের অনুমানের জন্য পর্যাপ্ত তথ্য না থাকে, তখন এটি গতিশীল প্রকারটি ব্যবহার করে।

এবং সুইফ্টের জন্য:

আপনার কোডে অনেকগুলি ভেরিয়েবল এবং এক্সপ্রেশনের ধরণের অংশ বা অংশ বাদ দিতে দিয়ে সুইফট প্রকারের অনুকরণটি ব্যাপকভাবে ব্যবহার করে। উদাহরণস্বরূপ, var x: int = 0 লেখার পরিবর্তে আপনি var x = 0 লিখতে পারেন, পুরোপুরি টাইপ বাদ দিয়ে — সংকলক সঠিকভাবে অনুমান করে যে x নামটির একটি মানের নাম দেয়।

গতিশীল প্রকারের

কোনও পরিবর্তনশীল যা কোনও প্রকারের হতে পারে ডার্টে গতিশীল কীওয়ার্ড এবং সুইফটে যে কোনও কীওয়ার্ড দিয়ে ঘোষিত হয়।

ডায়ামিক প্রকারগুলি সাধারণত JSON এর মতো ডেটা পড়ার সময় ব্যবহৃত হয়।

পরিবর্তনীয় / অপরিবর্তনীয় পরিবর্তনশীল

চলকগুলি পরিবর্তনীয় বা পরিবর্তনযোগ্য হিসাবে ঘোষণা করা যেতে পারে।

পরিবর্তনীয় ভেরিয়েবলগুলি ঘোষণার জন্য, উভয় ভাষাই ভ্যার কীওয়ার্ড ব্যবহার করে।

var a = 10; // ইন্ট (ডার্ট)
a = 20; // ঠিক আছে
var a = 10 // ইন্টার (সুইফ্ট)
a = 20 // ঠিক আছে

অপরিবর্তনীয় ভেরিয়েবলগুলি ঘোষণা করতে, ডার্ট চূড়ান্ত ব্যবহার করে এবং সুইফট লেট ব্যবহার করে।

চূড়ান্ত a = 10;
a = 20; // 'এ': একটি চূড়ান্ত পরিবর্তনশীল, কেবল একবার সেট করা যেতে পারে।
একটি = 10 দিন
a = 20 // মান নির্ধারণ করতে পারে না: 'এ' হ'ল 'লেট' ধ্রুবক

দ্রষ্টব্য: ডার্ট ডকুমেন্টেশনটি দুটি কীওয়ার্ড, ফাইনাল এবং কনস্টের সংজ্ঞা দেয় যা নীচের মত কাজ করে:

যদি আপনি কখনই কোনও ভেরিয়েবল পরিবর্তন করতে চান না, তবে ভেরার পরিবর্তে বা কোনও প্রকারের পরিবর্তে ফাইনাল বা কনস্ট ব্যবহার করুন। একটি চূড়ান্ত পরিবর্তনশীল শুধুমাত্র একবার সেট করা যেতে পারে; একটি কনস্টাল ভেরিয়েবল একটি সংকলন-সময় ধ্রুবক। (কনস্টেন্ট ভেরিয়েবলগুলি সুস্পষ্টভাবে চূড়ান্ত)) প্রথমবারের মতো এটি ব্যবহার করার পরে একটি চূড়ান্ত শীর্ষ স্তরের বা শ্রেণি ভেরিয়েবল শুরু করা হয়।

ডার্ট ওয়েবসাইটে এই পোস্টে আরও ব্যাখ্যা পাওয়া যায়:

চূড়ান্ত মানে সিঙ্গল-এসাইনমেন্ট। একটি চূড়ান্ত পরিবর্তনশীল বা ক্ষেত্রের একটি ইনিশিয়ালাইজার থাকতে হবে। একবার কোনও মূল্য নির্ধারিত হয়ে গেলে, একটি চূড়ান্ত ভেরিয়েবলের মান পরিবর্তন করা যায় না। চূড়ান্ত পরিবর্তনশীল পরিবর্তন করে।

টিএল; ডিআর: ডার্টে অপরিবর্তনীয় ভেরিয়েবলগুলি সংজ্ঞায়িত করতে চূড়ান্ত ব্যবহার করুন।

সুইফটে, আমরা লেট সহ ধ্রুবকগুলি ঘোষণা করি। বরাত দিয়ে:

একটি ধ্রুবক ঘোষণা আপনার প্রোগ্রামে একটি ধ্রুবক নামের মান প্রবর্তন করে। লেট কীওয়ার্ড ব্যবহার করে ধ্রুবক ঘোষণাগুলি ঘোষিত হয় এবং নিম্নলিখিত ফর্মটি রয়েছে:
স্থির নাম দিন: টাইপ = এক্সপ্রেশন
একটি ধ্রুবক ঘোষণাটি ধীরে ধীরে নাম এবং আরম্ভকারী অভিব্যক্তির মানের মধ্যে একটি অপরিবর্তনীয় বাধ্যতামূলক সংজ্ঞা দেয়; ধ্রুবকের মান সেট হওয়ার পরে, এটি পরিবর্তন করা যায় না।

আরও পড়ুন: দ্রুত ঘোষণা।

ক্রিয়াকলাপ

কার্যগুলি হ'ল সুইফ্ট এবং ডার্টে প্রথম শ্রেণির নাগরিক।

এর অর্থ হ'ল অবজেক্টের মতো ফাংশনগুলি আর্গুমেন্ট হিসাবে পাস করা যায়, বৈশিষ্ট্য হিসাবে সংরক্ষণ করা যায় বা ফলস্বরূপ ফিরে আসতে পারে।

প্রাথমিক তুলনা হিসাবে, আমরা দেখতে পাচ্ছি যে কীভাবে কোনও আর্গুমেন্ট নেই এমন ফাংশনগুলি ডিক্লেয়ার করতে হয়।

ডার্টে, রিটার্ন টাইপ পদ্ধতির নামের আগে:

অকার্যকর foo ();
int বার ();

সুইফটে আমরা -> টি সংকেত প্রত্যয় হিসাবে ব্যবহার করি। যদি কোনও ফেরতের মান (শূন্যতা) না থাকে তবে এটির প্রয়োজন হবে না:

ফান ফু ()
ফানক বার () -> ইন্ট

আরও পড়ুন:

  • ডার্ট ফাংশন
  • দ্রুত কার্যাদি

নামযুক্ত এবং নামহীন পরামিতি

উভয় ভাষা নামযুক্ত এবং নামবিহীন পরামিতিগুলিকে সমর্থন করে।

সুইফটে, পরামিতিগুলির নাম ডিফল্ট হিসাবে দেওয়া হয়:

ফানক ফু (নাম: স্ট্রিং, বয়স: আন্ত, উচ্চতা: ডাবল)
foo (নাম: "Andrea", বয়স: 34, উচ্চতা: 1.84)

ডার্টে, আমরা কোঁকড়া ধনুর্বন্ধনী ({}) দিয়ে নামযুক্ত পরামিতিগুলি সংজ্ঞায়িত করি:

অকার্যকর foo (ring স্ট্রিং নাম, int বয়স, দ্বিগুণ উচ্চতা});
foo (নাম: 'Andrea', বয়স: 34, উচ্চতা: 1.84);

সুইফ্টে, আমরা বাইরের প্যারামিটার হিসাবে আন্ডারস্কোর (_) ব্যবহার করে নামহীন পরামিতিগুলি সংজ্ঞায়িত করি:

ফানক ফু (_ নাম: স্ট্রিং, _ বয়স: ইনট, _ উচ্চতা: দ্বিগুণ)
foo ("Andrea", 34, 1.84)

ডার্টে, আমরা কোঁকড়া ধনুর্বন্ধনী ({}) বাদ দিয়ে নামহীন পরামিতিগুলি সংজ্ঞায়িত করি:

অকার্যকর foo (স্ট্রিং নাম, int বয়স, দ্বিগুণ উচ্চতা);
foo ('Andrea', 34, 1.84);

আরও পড়ুন: সুইফটে ফাংশন আর্গুমেন্ট লেবেল এবং প্যারামিটারের নাম।

Ptionচ্ছিক এবং ডিফল্ট পরামিতি

উভয় ভাষা ডিফল্ট পরামিতি সমর্থন করে।

সুইফ্টে, আপনি সেই প্যারামিটারের ধরণের পরে প্যারামিটারকে একটি মূল্য নির্ধারণ করে কোনও ফাংশনে কোনও প্যারামিটারের জন্য একটি ডিফল্ট মান নির্ধারণ করতে পারেন। যদি কোনও ডিফল্ট মান নির্ধারণ করা হয় তবে ফাংশনটি কল করার সময় আপনি সেই পরামিতিটি বাদ দিতে পারেন।
ফানক ফু (নাম: স্ট্রিং, বয়স: ইন্ট = 0, উচ্চতা: ডাবল = 0.0)
foo (নাম: "Andrea", বয়স: 34) // নাম: "Andrea", বয়স: 34, উচ্চতা: 0.0

আরও পড়ুন: সুইফটে ডিফল্ট প্যারামিটার মান।

ডার্টে, alচ্ছিক প্যারামিটারগুলি অবস্থানগত বা নামযুক্ত হতে পারে তবে উভয়ই নয়।

// অবস্থানগত alচ্ছিক পরামিতি
অকার্যকর foo (স্ট্রিং নাম, [জন্মের বয়স = 0, দ্বিগুণ উচ্চতা = 0.0]);
foo ('Andrea', 34); // নাম: 'আন্দ্রেয়া', বয়স: 34, উচ্চতা: 0.0
// নামের optionচ্ছিক পরামিতি
অকার্যকর foo (ring স্ট্রিং নাম, অন্ত বয়স = 0, ডাবল উচ্চতা = 0.0});
foo (নাম: 'Andrea', বয়স: 34); // নাম: 'আন্দ্রেয়া', বয়স: 34, উচ্চতা: 0.0

আরও পড়ুন: ডার্টে alচ্ছিক পরামিতি।

বন্ধ

প্রথম শ্রেণীর অবজেক্ট হওয়ার কারণে ফাংশনগুলি অন্যান্য ফাংশনের পক্ষে যুক্তি হিসাবে বা ভেরিয়েবলগুলিকে বরাদ্দ করা যেতে পারে।

এই প্রসঙ্গে, ফাংশনগুলি ক্লোজার হিসাবেও পরিচিত।

এখানে কোনও ফাংশনের ডার্ট উদাহরণ রয়েছে যা প্রতিটি আইটেমের সূচি এবং বিষয়বস্তু মুদ্রণের জন্য ক্লোজ ব্যবহার করে আইটেমের তালিকার উপরে পুনরাবৃত্তি করে:

চূড়ান্ত তালিকা = ['আপেল', 'কলা', 'কমলা'];
list.forEach ((আইটেম) => মুদ্রণ ('$ {list.indexOf (আইটেম)}: $ আইটেম'));

বন্ধটি একটি যুক্তি (আইটেম) নেয়, সেই আইটেমের সূচি এবং মানটি মুদ্রণ করে এবং কোনও মান দেয় না।

তীর চিহ্ন (=>) এর ব্যবহারটি নোট করুন। এটি কোঁকড়া ধনুর্বন্ধনী ভিতরে একক রিটার্ন বিবৃতি জায়গায় ব্যবহার করতে পারেন:

list.forEach ((আইটেম)) {মুদ্রণ ('$ {list.indexOf (আইটেম)}: $ আইটেম');});

সুইফটে একই কোডটি দেখতে এমন দেখাচ্ছে:

আসুন তালিকাটি [= "আপেল", "কলা", "কমলা"]
list.forEach ({মুদ্রণ ("\ (স্ট্রিং (বর্ণনা: list.firstIndex (এর: $ 0))) \ ($ 0)")})

এই ক্ষেত্রে, আমরা সমাপ্তিতে পাস হওয়া আর্গুমেন্টের জন্য কোনও নাম নির্দিষ্ট করি না, এবং প্রথম যুক্তিটি বোঝাতে পরিবর্তে $ 0 ব্যবহার করি। এটি সম্পূর্ণরূপে alচ্ছিক এবং আমরা যদি পছন্দ করি তবে আমরা একটি নামযুক্ত প্যারামিটার ব্যবহার করতে পারি:

list.forEach (print মুদ্রণ আইটেম ("\ (স্ট্রিং (বর্ণনা: list.firstIndex (এর: আইটেম)))) \ (আইটেম)")})

বন্ধগুলি প্রায়শই সুইফটে অ্যাসিক্রোনাস কোডের সমাপ্তি ব্লক হিসাবে ব্যবহৃত হয় (অ্যাসিনক্রোনাস প্রোগ্রামিংয়ের নীচের অংশটি দেখুন)।

আরও পড়ুন:

  • ডার্ট বেনামে ফাংশন
  • সুইফট বন্ধ

tuples

সুইফ্ট ডক্স থেকে:

টিপলস একক যৌগিক মানতে একাধিক মানকে গ্রুপ করে। একটি টুপলের মধ্যে থাকা মানগুলি যে কোনও ধরণের হতে পারে এবং একে অপরের মতো একই ধরণের হতে হবে না।

এগুলি ছোট হালকা ওজনের প্রকার হিসাবে ব্যবহার করা যেতে পারে এবং একাধিক রিটার্ন মান সহ ফাংশন সংজ্ঞায়িত করতে কার্যকর হয়।

সুইফটে টিপলগুলি কীভাবে ব্যবহার করবেন তা এখানে:

আসুন t = ("Andrea", 34, 1.84)
মুদ্রণ (t.0) // মুদ্রণ "অ্যান্ড्रिया"
মুদ্রণ (t.1) // প্রিন্ট 34
মুদ্রণ (t.2) // প্রিন্ট 1.84

ডার্টে টিপলগুলি একটি পৃথক প্যাকেজ সহ সমর্থিত:

কনস্ট টি = কনট টিপল 3 <স্ট্রিং, ইনট, ডাবল> ('Andrea', 34, 1.84);
(T.item1) মুদ্রণ; // প্রিন্ট 'Andrea'
(T.item2) মুদ্রণ; // প্রিন্ট 34
(T.item3) মুদ্রণ; // প্রিন্ট 1.84

নিয়ন্ত্রণ প্রবাহ

উভয় ভাষা বিভিন্ন ধরণের নিয়ন্ত্রণ প্রবাহের স্টেটমেন্ট সরবরাহ করে।

এর উদাহরণগুলি হ'ল শর্তসাপেক্ষে, লুপের জন্য এবং যখন থাকে, বিবৃতি স্যুইচ করে।

এগুলি Coverেকে রাখা বেশ দীর্ঘতর হবে, তাই আমি সরকারী দস্তাবেজগুলিকে উল্লেখ করি:

  • সুইফট নিয়ন্ত্রণ প্রবাহ Flow
  • ডার্ট কন্ট্রোল ফ্লো স্টেটমেন্ট

সংগ্রহ (অ্যারে, সেট, মানচিত্র)

অ্যারে / তালিকা

অ্যারেগুলি অবজেক্টগুলির গোষ্ঠীগুলি অর্ডার করা হয়।

ডার্টে তালিকা হিসাবে অ্যারে তৈরি করা যেতে পারে:

var ফাঁকা তালিকা =  []; // খালি তালিকা
var তালিকা = [1, 2, 3]; // আক্ষরিক তালিকা
list.length; // 3
তালিকা [1]; // 2

অ্যারেগুলিতে সুইফটে একটি বিল্ট-ইন টাইপ রয়েছে:

var ফাঁকাআরে = [ইনট] () // ফাঁকা অ্যারে
var অ্যারে = [1, 2, 3] // অ্যারে আক্ষরিক
অ্যারে.কাউন্ট // 3
অ্যারে [1] // 2

সেট

সুইফ্ট ডক্সের উদ্ধৃতি:

একটি সেট কোনও সংজ্ঞায়িত অর্ডার ছাড়াই একই ধরণের স্বতন্ত্র মানগুলি সংরক্ষণ করে। যখন আইটেমগুলির ক্রম গুরুত্বপূর্ণ না হয় বা কোনও আইটেম একবারে একবার উপস্থিত হয় তা নিশ্চিত করার প্রয়োজন হলে আপনি অ্যারের পরিবর্তে একটি সেট ব্যবহার করতে পারেন।

এটি ডার্টে সেট শ্রেণীর সাথে সংজ্ঞায়িত করা হয়েছে।

var ফাঁকাফাল = <স্ট্রিং> {}; // খালি সেট আক্ষরিক
var ফল = {'আপেল', 'কলা'}; // আক্ষরিক সেট করুন

তেমনি, সুইফটে:

var খালি ফল = সেট <স্ট্রিং> ()
var ফল = সেট <স্ট্রিং> (["আপেল", "কলা"])

মানচিত্র / অভিধান

মানচিত্র / অভিধানের জন্য সুইফ্ট ডক্সের একটি ভাল সংজ্ঞা রয়েছে:

একটি অভিধান কোনও সংজ্ঞায়িত ক্রম ছাড়াই একই ধরণের কী এবং একই ধরণের মানগুলির মধ্যে সংযুক্তি সঞ্চয় করে। প্রতিটি মান একটি অনন্য কী এর সাথে যুক্ত, যা অভিধানের মধ্যে সেই মানটির জন্য সনাক্তকারী হিসাবে কাজ করে।

ডার্টে মানচিত্রগুলি এর মতো সংজ্ঞায়িত করা হয়:

var namesOfIntegers = মানচিত্র <আন্ত, স্ট্রিং> (); // খালি মানচিত্র
var বিমানবন্দরগুলি = {'YYZ': 'টরন্টো পিয়ারসন', 'ডাব': 'ডাবলিন'}; আক্ষরিক // মানচিত্র

মানচিত্রগুলিকে সুইফটে অভিধান বলা হয়:

var namesOfIntegers = [অন্ত: স্ট্রিং] () // ফাঁকা অভিধান
var বিমানবন্দর = ["YYZ": "টরন্টো পিয়ারসন", "ডাব": "ডাবলিন"] // অভিধান আক্ষরিক

আরও পড়ুন:

  • ডার্ট সংগ্রহ
  • সুইফ্ট সংগ্রহ (বিশেষত আমি সেটগুলি সম্পর্কে বিভাগটি সুপারিশ করি)।

অযোগ্যতা এবং বিকল্পগুলি

ডার্টে, যে কোনও বস্তু নালাগুলি হতে পারে। এবং নাল অবজেক্টের পদ্ধতি বা ভেরিয়েবল অ্যাক্সেস করার চেষ্টা করলে নাল পয়েন্টার ব্যতিক্রম হয়। কম্পিউটার প্রোগ্রামগুলিতে এটি ত্রুটির অন্যতম সাধারণ উত্স (যদি সর্বাধিক সাধারণ না হয়)।

শুরু থেকেই, সুইফ্টের বিকল্প ছিল, বস্তুগুলির মূল্য থাকতে পারে বা না থাকতে পারে তা ঘোষণার জন্য একটি অন্তর্নির্মিত ভাষা বৈশিষ্ট্য। দস্তাবেজগুলি উদ্ধৃত করা হচ্ছে:

আপনি এমন পরিস্থিতিতে বিকল্পগুলি ব্যবহার করেন যেখানে কোনও মান অনুপস্থিত থাকতে পারে। একটি alচ্ছিক দুটি সম্ভাবনার প্রতিনিধিত্ব করে: হয় একটি মান আছে এবং আপনি সেই মানটি অ্যাক্সেস করার জন্য alচ্ছিকটিকে আনপ্যাপ করতে পারেন, বা কোনও মানই নেই।

এর বিপরীতে, আমরা গ্যারান্টি দিতে অ-alচ্ছিক ভেরিয়েবলগুলি ব্যবহার করতে পারি যে তাদের সর্বদা একটি মান থাকবে:

var x: আন্ত? // .চ্ছিক
var y: Int = 1 // অ-alচ্ছিক, অবশ্যই আরম্ভ করা উচিত

দ্রষ্টব্য: একটি সুইফ্ট ভেরিয়েবল alচ্ছিক বলা মোটামুটি একই রকম যে ডার্ট ভেরিয়েবলটি নাল হতে পারে।

বিকল্পগুলির জন্য ভাষা-স্তরীয় সমর্থন ব্যতীত, চলকটি যদি শূন্য থাকে তবে আমরা কেবল রানটাইমে পরীক্ষা করতে পারি।

বিকল্পগুলি সহ, আমরা পরিবর্তে সংকলন সময়ে এই তথ্যটি এনকোড করি। বিকল্পগুলি তারা মান রাখে কিনা তা নিরাপদে যাচাই করতে আমরা আন-মোড়ক করতে পারি:

ফানক শো-অপশনাল (এক্স: ইন্ট?) {
  // সবচেয়ে ভাল অনুশীলন হিসাবে `if`` এর চেয়ে than গার্ড লেট ব্যবহার করুন
  যদি x = x {// অপসারণ unচ্ছিক করা যাক
    মুদ্রণ (x) এর
  } অন্য {
    মুদ্রণ ("কোনও মূল্য নেই")
  }
}
শো-অপশনাল (x: শূন্য) // মুদ্রণ "কোনও মূল্য নেই"
শো-অপশনাল (x: 5) // প্রিন্ট "5"

এবং যদি আমরা জানি যে একটি ভেরিয়েবলের অবশ্যই একটি মান থাকতে পারে তবে আমরা একটি অ-alচ্ছিক ব্যবহার করতে পারি:

ফানক শোনিওশনাল (এক্স: ইনট) {
  মুদ্রণ (x) এর
}
showNonOptional (x: nil) // [সংকলন ত্রুটি] নীল প্রত্যাশিত আর্গুমেন্ট টাইপ 'ইন্টার' এর সাথে সামঞ্জস্যপূর্ণ নয়
showNonOptional (x: 5) // "5" প্রিন্ট করে

উপরের প্রথম উদাহরণটি ডার্টে এভাবে প্রয়োগ করা যেতে পারে:

শূন্য শোঅফশনাল (ইন্ট এক্স) {
  যদি (x! = নাল) {
    (X) এর প্রিন্ট;
  } অন্য {
    মুদ্রণ ('কোনও মূল্য নেই');
  }
}
showOptional (নাল) // মুদ্রণ "কোন মূল্য নেই"
শো-অপশনাল (5) // প্রিন্ট "5"

এবং দ্বিতীয়টি এর মতো:

অকার্যকর শোঅনশনাল (ইন্ট এক্স) {
  assert (x! = নাল);
  (X) এর প্রিন্ট;
}
showNonOptional (নাল) // [রানটাইম ত্রুটি] অপ্রকাশিত ব্যতিক্রম: দৃser়তা ব্যর্থ হয়েছে
showNonOptional (5) // "5" প্রিন্ট করে

বিকল্প থাকা মানে আমরা রানটাইমের পরিবর্তে সংকলন সময়ে ত্রুটিগুলি ধরতে পারি। এবং ত্রুটিগুলি ধরা কমে কম বাগ সহ নিরাপদ কোডে প্রারম্ভিক ফলাফল।

বিকল্পগুলির জন্য ডার্টের সমর্থনের অভাব কোনওভাবেই দৃser়তার ব্যবহার (এবং নামযুক্ত প্যারামিটারগুলির জন্য @ প্রয়োজনীয় টীকাগুলি) হ্রাস করে।

এগুলি ফ্লাটার এসডিকে ব্যাপকভাবে ব্যবহৃত হয়, তবে অতিরিক্ত বয়লারপ্লেট কোডের ফলস্বরূপ।

রেকর্ডের জন্য, ডার্টে নন-অ্যালবাম যুক্ত করার প্রস্তাব রয়েছে।

আমি এখানে কভার করেছি তার চেয়ে বেশি বিকল্প সম্পর্কেও রয়েছে। একটি ভাল ওভারভিউয়ের জন্য, দেখুন: সুইফটে বিকল্পগুলি।

ক্লাস

ক্লাসগুলি অবজেক্ট-ওরিয়েন্টেড ভাষায় প্রোগ্রাম লেখার জন্য প্রধান বিল্ডিং ব্লক।

ক্লাসগুলি কিছু পার্থক্য সহ ডার্ট এবং সুইফট দ্বারা সমর্থিত।

বাক্য গঠন

সুইফটে একটি ইনিশিয়ালাইজার এবং তিন সদস্যের ভেরিয়েবল সহ ক্লাস এখানে রয়েছে:

ক্লাস ব্যক্তি {
  নাম দিন: স্ট্রিং
  বয়স দিন: ইন্ট
  উচ্চতা দিন: দ্বিগুণ
  init (নাম: স্ট্রিং, বয়স: আন্ত, উচ্চতা: ডাবল) {
    self.name = নাম
    self.age = বয়স
    স্ব.হাইট = উচ্চতা
  }
}

এবং ডার্টে একই:

ক্লাস ব্যক্তি {
  ব্যক্তি ({this.name, this.age, this.height});
  চূড়ান্ত স্ট্রিং নাম;
  চূড়ান্ত int বয়স;
  চূড়ান্ত দ্বিগুণ উচ্চতা;
}

ডার্ট কন্সট্রাক্টরে এটির ব্যবহারটি লক্ষ্য করুন property [সম্পত্তিName]। কনস্ট্রাক্টর চালনার আগে ইনস্ট্যান্সের সদস্য ভেরিয়েবলগুলি সেট করার জন্য এটি সিনট্যাকটিক চিনি।

কারখানা নির্মাণকারী

ডার্টে, কারখানার নির্মাণকারী তৈরি করা সম্ভব। বরাত দিয়ে:

কোনও কনস্ট্রাক্টর কার্যকর করার সময় কারখানার কীওয়ার্ডটি ব্যবহার করুন যা সর্বদা তার শ্রেণীর কোনও নতুন উদাহরণ তৈরি করে না।

জেএসএন থেকে মডেল ক্লাস তৈরি করার সময় কারখানা নির্মাণকারীদের একটি ব্যবহারিক ব্যবহারের বিষয়টি:

ক্লাস ব্যক্তি {
  ব্যক্তি ({this.name, this.age, this.height});
  চূড়ান্ত স্ট্রিং নাম;
  চূড়ান্ত int বয়স;
  চূড়ান্ত দ্বিগুণ উচ্চতা;
  ফ্যাক্টরি পার্সন.ফর্ম জেএসএন (মানচিত্র <গতিশীল, গতিশীল> জসন) {
    স্ট্রিং নাম = json ['নাম'];
    int age = json ['age'];
    দ্বিগুণ উচ্চতা = json ['উচ্চতা'];
    রিটার্ন ব্যক্তি (নাম: নাম, বয়স: বয়স, উচ্চতা: উচ্চতা);
  }
}
var p = Person.fromJSON ({
  'নাম': 'আন্দ্রেয়া',
  'বয়স': 34,
  'উচ্চতা': 1.84,
});

আরও পড়ুন:

  • ডার্ট ক্লাস
  • সুইফ্ট স্ট্রাকচার এবং ক্লাস

উত্তরাধিকার

সুইফটে একটি একক-উত্তরাধিকারের মডেল ব্যবহার করা হয়েছে যার অর্থ যে কোনও শ্রেণীর মধ্যে কেবল একটি সুপারক্লাস থাকতে পারে। সুইফ্ট ক্লাসগুলি একাধিক ইন্টারফেস (প্রোটোকল নামেও পরিচিত) প্রয়োগ করতে পারে।

ডার্ট ক্লাসগুলিতে মেশিন-ভিত্তিক উত্তরাধিকার রয়েছে। দস্তাবেজগুলি উদ্ধৃত করা হচ্ছে:

প্রতিটি বস্তু একটি শ্রেণীর উদাহরণ এবং সমস্ত শ্রেণি অবজেক্ট থেকে নেমে আসে। মিক্সিন-ভিত্তিক উত্তরাধিকারের অর্থ হ'ল যদিও প্রতিটি শ্রেণীর (অবজেক্ট ব্যতীত) ঠিক একটি সুপারক্লাস রয়েছে, তবে এক শ্রেণির বডি একাধিক শ্রেণীর শ্রেণিবিন্যাসে পুনরায় ব্যবহার করা যেতে পারে।

এখানে সুইফটে কর্মের একক-উত্তরাধিকার:

ক্লাস যানবাহন {
  হুইলকাউন্ট: ইনট
  init (হুইলকাউন্ট: আন্ত) {
    self.wheelCount = হুইলকাউন্ট
  }
}
ক্লাস সাইকেল: যানবাহন {
  এটা() {
    super.init (হুইলকাউন্ট: 2)
  }
}

এবং ডার্টে:

ক্লাস যানবাহন {
  যানবাহন ({this.wheelCount});
  ফাইনাল ইন হুইলকাউন্ট;
}
ক্লাস সাইকেল যানবাহন প্রসারিত {
  সাইকেল (): সুপার (হুইলকাউন্ট: 2);
}

প্রোপার্টি

এগুলিকে ডার্টে ইনস্ট্যান্স ভেরিয়েবল এবং সুইফটে কেবল বৈশিষ্ট্য বলা হয়।

সুইফটে, সঞ্চিত এবং গণিত বৈশিষ্ট্যের মধ্যে পার্থক্য রয়েছে:

ক্লাস সার্কেল {
  init (ব্যাসার্ধ: দ্বিগুণ) {
    self.radius = ব্যাসার্ধ
  }
  ব্যাসার্ধ দিন: ডাবল // সঞ্চিত সম্পত্তি
  var ব্যাস: দ্বিগুণ {// কেবল পাঠযোগ্য গণনা করা সম্পত্তি
    ব্যাসার্ধ * 2.0
  }
}

ডার্টে, আমাদের একই পার্থক্য রয়েছে:

ক্লাস সার্কেল {
  সার্কেল ({this.radius});
  চূড়ান্ত ডাবল ব্যাসার্ধ; // সঞ্চিত সম্পত্তি
  ডাবল ব্যাস ব্যাস => ব্যাসার্ধ * 2.0; // গণিত সম্পত্তি
}

গণিত বৈশিষ্ট্যের জন্য গেটার্স ছাড়াও আমরা সেটটারগুলিও সংজ্ঞায়িত করতে পারি।

উপরের উদাহরণটি ব্যবহার করে, আমরা একটি সেটার অন্তর্ভুক্ত করতে ব্যাসের সম্পত্তিটি আবার লিখতে পারি:

var ব্যাস: দ্বিগুণ {// গণিত সম্পত্তি
  পাওয়া {
    ব্যাসার্ধ * 2.0
  }
  সেট {
    ব্যাসার্ধ = নতুন মূল্য / ২.০
  }
}

ডার্টে আমরা আলাদা আলাদা সেটার যুক্ত করতে পারি:

ব্যাস সেট করুন (দ্বিগুণ মান) => ব্যাসার্ধ = মান / 2.0;

সম্পত্তি পর্যবেক্ষক

এটি সুইফটের একটি অদ্ভুত বৈশিষ্ট্য। বরাত দিয়ে:

সম্পত্তি পর্যবেক্ষকরা কোনও সম্পত্তির মান পরিবর্তনের জন্য পর্যবেক্ষণ এবং প্রতিক্রিয়া জানান। সম্পত্তির পর্যবেক্ষককে যখনই কোনও সম্পত্তির মান সেট করা হয় তখনই ডাকা হয়, এমনকি যদি নতুন মান সম্পত্তির বর্তমান মানের সমান হয়।

এগুলি এগুলি ব্যবহার করা যেতে পারে:

var ব্যাস: দ্বিগুণ {// কেবল পাঠযোগ্য গণনা করা সম্পত্তি
  উইলসেট (নতুন মাত্রা) {
    মুদ্রণ ("পুরানো মান: \ (ব্যাস), নতুন মান: \ (নতুন মাত্রা)")
  }
  didSet
    মুদ্রণ ("পুরানো মান: \ (পুরাতন মূল্য), নতুন মান: \ (ব্যাস)")
  }
}

আরও পড়ুন:

  • ডার্ট ইনস্ট্যান্স ভেরিয়েবল, গেটর এবং সেটারগুলি
  • সুইফ্ট প্রপার্টি

প্রোটোকল / বিমূর্ত ক্লাস

তারা এখানে কীভাবে প্রয়োগ করা হয় তা উল্লেখ না করে আমরা এখানে পদ্ধতি এবং বৈশিষ্ট্যগুলি নির্ধারণ করতে ব্যবহৃত একটি নির্মাণ সম্পর্কে কথা বলি। এটি অন্যান্য ভাষায় ইন্টারফেস হিসাবে পরিচিত।

সুইফটে ইন্টারফেসগুলিকে প্রোটোকল বলা হয়।

প্রোটোকল আকার {
  ফানক অঞ্চল () -> ডাবল
}
বর্গাকার স্কোয়ার: আকার {
  দিক: ডাবল
  init (পাশ: ডাবল) {
    self.side = পাশ
  }
  ফানক অঞ্চল () -> ডাবল {
    পাশ ফিরে * পাশ
  }
}

ডার্ট একটি অনুরূপ নির্মাণ একটি বিমূর্ত শ্রেণি হিসাবে পরিচিত। বিমূর্ত শ্রেণিগুলি তাত্ক্ষণিকভাবে চালু করা যায় না। তারা তবে প্রয়োগগুলির যে পদ্ধতিগুলি নির্ধারণ করতে পারে।

উপরের উদাহরণটি ডার্টে এভাবে লেখা যেতে পারে:

বিমূর্ত শ্রেণি আকার {
  দ্বিগুণ ক্ষেত্র ();
}
বর্গাকার স্কোয়ার আকার প্রসারিত করে {
  স্কয়ার ({this.side});
  চূড়ান্ত ডাবল পক্ষ;
  দ্বিগুণ ক্ষেত্র () => পাশ * পাশ;
}

আরও পড়ুন:

  • সুইফট প্রোটোকল
  • ডার্ট বিমূর্ত ক্লাস

Mixins

ডার্টে, একটি মিশিন কেবল একটি নিয়মিত ক্লাস, যা একাধিক শ্রেণীর শ্রেণিবিন্যাসে পুনরায় ব্যবহার করা যেতে পারে।

নেম এক্সটেনশন মিক্সিনের সাথে আমরা আগে সংজ্ঞায়িত ব্যক্তি শ্রেণিটি কীভাবে প্রসারিত করতে পারি তা এখানে:

বিমূর্ত শ্রেণীর নামবৃদ্ধি {
  স্ট্রিং নাম পেতে;
  স্ট্রিং get uppercaseName => name.toUpperCase ();
  স্ট্রিং নিন লোয়ারকেসনেম => নাম.toLowerCase ();
}
नेम এক্সটেনশন সহ শ্রেণীর ব্যক্তি
  ব্যক্তি ({this.name, this.age, this.height});
  চূড়ান্ত স্ট্রিং নাম;
  চূড়ান্ত int বয়স;
  চূড়ান্ত দ্বিগুণ উচ্চতা;
}
var person = ব্যক্তি (নাম: 'Andrea', বয়স: 34, উচ্চতা: 1.84);
(Person.uppercaseName) মুদ্রণ; // 'আন্ড্রে'

আরও পড়ুন: ডার্ট মিক্সিনস

এক্সটেনশানগুলি

এক্সটেনশনগুলি সুইফট ভাষার বৈশিষ্ট্য। দস্তাবেজগুলি উদ্ধৃত করা হচ্ছে:

এক্সটেনশনগুলি বিদ্যমান শ্রেণি, কাঠামো, গণনা বা প্রোটোকল ধরণের ক্ষেত্রে নতুন কার্যকারিতা যুক্ত করে। এর মধ্যে এমন প্রকারগুলি প্রসারিত করার ক্ষমতা অন্তর্ভুক্ত রয়েছে যার জন্য আপনার মূল উত্স কোডে অ্যাক্সেস নেই (retroactive মডেলিং হিসাবে পরিচিত)।

ডার্টে মিক্সিন দিয়ে এটি সম্ভব নয়।

উপরের উদাহরণটি ধার করে আমরা ব্যক্তি শ্রেণিটি এর মতো বাড়িয়ে দিতে পারি:

এক্সটেনশন ব্যক্তি {
  বড় বড় নাম: স্ট্রিং {
    প্রত্যাবর্তনের নাম
  }
  ছোট ছোট নাম: স্ট্রিং {
    প্রত্যাবর্তনের নাম
  }
}
var person = ব্যক্তি (নাম: "Andrea", বয়স: 34, উচ্চতা: 1.84)
মুদ্রণ (person.uppercaseName) // "ANDREA"

আমি এখানে উপস্থাপনের চেয়ে এক্সটেনশনের আরও অনেক কিছুই রয়েছে, বিশেষত যখন সেগুলি প্রোটোকল এবং জেনেরিকের সাথে একত্রে ব্যবহৃত হয়।

এক্সটেনশনের জন্য খুব সাধারণ ব্যবহারের একটি ক্ষেত্রে বিদ্যমান প্রকারগুলিতে প্রোটোকল কনফারেন্স যুক্ত করছে। উদাহরণস্বরূপ, আমরা বিদ্যমান মডেল শ্রেণিতে সিরিয়ালাইজেশন ক্ষমতা যুক্ত করতে একটি এক্সটেনশন ব্যবহার করতে পারি।

আরও পড়ুন: সুইফট এক্সটেনশনগুলি

Enums

ডার্টের এনামগুলিতে কিছু প্রাথমিক সহায়তা রয়েছে।

সুইফটে এনামগুলি খুব শক্তিশালী, কারণ তারা সম্পর্কিত প্রকারগুলি সমর্থন করে:

নেটওয়ার্ক রেসপন্স um
  কেস সাফল্য (বডি: ডেটা)
  কেস ব্যর্থতা (ত্রুটি: ত্রুটি)
}

এটি এ জাতীয় যুক্তি লিখতে সক্ষম করে:

স্যুইচ (প্রতিক্রিয়া) {
  কেস .সাক্সেস (তথ্য দিন):
    // (অ-alচ্ছিক) ডেটা দিয়ে কিছু করুন
  কেস। ব্যর্থতা (ত্রুটি যাক):
    // (অ-alচ্ছিক) ত্রুটি সহ কিছু করুন
}

ডেটা এবং ত্রুটির পরামিতিগুলি পারস্পরিক একচেটিয়া কীভাবে তা লক্ষ্য করুন।

ডার্টে আমরা এনামগুলিতে অতিরিক্ত মানগুলি সংযুক্ত করতে পারি না এবং উপরের কোডটি এই লাইনগুলির সাথে প্রয়োগ করা যেতে পারে:

ক্লাস নেটওয়ার্করেসপনস {
  নেটওয়ার্কআরস্পোনস ({this.data, this.error})
  // ডেটা এবং ত্রুটি পারস্পরিক একচেটিয়া করতে দৃser়তা
  : দাবি (ডেটা! = নাল && ত্রুটি == নাল || ডেটা == নাল && ত্রুটি! = নাল);
  চূড়ান্ত Uint8List তথ্য;
  চূড়ান্ত স্ট্রিং ত্রুটি;
}
var প্রতিক্রিয়া = নেটওয়ার্কআরস্পোনস (ডেটা: Uint8List (0), ত্রুটি: নাল);
যদি (রেসপন্স.ডাটা! = নাল) {
  // ব্যবহার ডেটা
} অন্য {
  // ব্যবহারের ত্রুটি
}

কয়েকটি নোট:

  • আমাদের কাছে বিকল্প নেই তা সত্যতার জন্য ক্ষতিপূরণ দেওয়ার জন্য আমরা জোর দিয়েছি use
  • সংকলক আমাদের সমস্ত সম্ভাব্য কেসগুলি পরীক্ষা করতে সহায়তা করতে পারে না। এর কারণ আমরা প্রতিক্রিয়া প্রক্রিয়া করতে কোনও স্যুইচ ব্যবহার করি না।

সংক্ষেপে, সুইফ্ট এনামগুলি ডার্টের চেয়ে অনেক বেশি শক্তিশালী এবং অভিব্যক্তিপূর্ণ।

ডার্ট সিল্ড ইউনিয়নগুলির মতো তৃতীয় পক্ষের গ্রন্থাগারগুলি সুইফট এনামগুলি প্রদত্ত যা অনুরূপ কার্যকারিতা সরবরাহ করে এবং শূন্যস্থান পূরণে সহায়তা করতে পারে।

আরও পড়ুন: সুইফট এনামস।

structs

সুইফটে আমরা স্ট্রাকচার এবং ক্লাস সংজ্ঞায়িত করতে পারি।

উভয় কনস্ট্রাক্টের অনেক কিছুই মিল এবং কিছু পার্থক্য রয়েছে।

মূল পার্থক্য হ'ল:

শ্রেণিগুলি রেফারেন্সের ধরণ এবং কাঠামোগুলি মান ধরণের

ডকুমেন্টেশন উদ্ধৃত:

একটি মান ধরণ এমন একটি ধরণের যার মানটি যখন কোনও পরিবর্তনশীল বা ধ্রুবককে অর্পণ করা হয় বা কোনও ফাংশনে স্থানান্তরিত হয় তখন এটি অনুলিপি করা হয়।
সমস্ত কাঠামো এবং গণনাগুলি সুইফটে মান ধরণের। এর অর্থ হ'ল যে কোনও কাঠামো এবং গণনার উদাহরণ আপনি তৈরি করেন - এবং বৈশিষ্ট্য হিসাবে তাদের যে কোনও মান ধরণের থাকে - সেগুলি আপনার কোডের চারপাশে পাস করার সময় সর্বদা অনুলিপি করা হয়।
মান প্রকারের মতো নয়, যখন কোনও পরিবর্তনশীল বা ধ্রুবককে অর্পণ করা হয় বা কোনও ফাংশনে পাস করা হয় তখন রেফারেন্স প্রকারগুলি অনুলিপি করা হয় না। একটি অনুলিপি পরিবর্তে, একই বিদ্যমান উদাহরণের একটি রেফারেন্স ব্যবহৃত হয়।

এর অর্থ কী তা দেখতে, নিম্নলিখিত উদাহরণটি বিবেচনা করুন, যেখানে আমরা ব্যক্তি শ্রেণিটিকে এটি পরিবর্তনীয় করে তুলতে পুনরায় উদ্দেশ্য করি:

ক্লাস ব্যক্তি {
  var নাম: স্ট্রিং
  var বয়স: ইনট
  ভার উচ্চতা: দ্বিগুণ
  init (নাম: স্ট্রিং, বয়স: আন্ত, উচ্চতা: ডাবল) {
    self.name = নাম
    self.age = বয়স
    স্ব.হাইট = উচ্চতা
  }
}
var a = ব্যক্তি (নাম: "Andrea", বয়স: 34, উচ্চতা: 1.84)
var b = a
b.age = 35
মুদ্রণ (a.age) // প্রিন্ট 35

আমরা যদি ব্যক্তিকে কাঠামো হিসাবে পুনরায় সংজ্ঞায়িত করি তবে আমাদের এটি রয়েছে:

কাঠামো ব্যক্তি {
  var নাম: স্ট্রিং
  var বয়স: ইনট
  ভার উচ্চতা: দ্বিগুণ
  init (নাম: স্ট্রিং, বয়স: আন্ত, উচ্চতা: ডাবল) {
    self.name = নাম
    self.age = বয়স
    স্ব.হাইট = উচ্চতা
  }
}
var a = ব্যক্তি (নাম: "Andrea", বয়স: 34, উচ্চতা: 1.84)
var b = a
b.age = 35
মুদ্রণ (a.age) // প্রিন্ট 34

আমি এখানে কভার করেছি তার চেয়ে অনেক বেশি স্ট্রাক্ট রয়েছে।

স্ট্রফ্টে ডেটা এবং মডেলগুলি হ্যান্ডেল করতে দুর্দান্ত প্রভাবের জন্য স্ট্রোকস ব্যবহার করা যেতে পারে, যার ফলে কম বাগের সাহায্যে শক্তিশালী কোড তৈরি করা যায়।

আরও ভাল ওভারভিউয়ের জন্য, পড়ুন: সুইফটে স্ট্রাকচার এবং ক্লাস।

শিল্প খাত

সুইফ্ট ডক্স থেকে একটি সংজ্ঞা ব্যবহার করে:

আপনার প্রোগ্রামের ত্রুটি শর্ত থেকে প্রতিক্রিয়া জানানো এবং পুনরুদ্ধার প্রক্রিয়া হ'ল ত্রুটি পরিচালনা।

ডার্ট এবং সুইফট উভয়ই কিছু পার্থক্য সহ ত্রুটিগুলি পরিচালনা করার কৌশল হিসাবে চেষ্টা / ধরাকে ব্যবহার করে।

ডার্টে, যে কোনও পদ্ধতি যে কোনও ধরণের ব্যতিক্রম ছুঁড়ে ফেলতে পারে।

ক্লাস ব্যাংক হিসাব {
  BankAccount ({this.balance});
  দ্বৈত ভারসাম্য;
  অকার্যকর প্রত্যাহার (দ্বিগুণ পরিমাণ) {
    যদি (পরিমাণ> ভারসাম্য) {
      থ্রো ব্যতিক্রম ('অপর্যাপ্ত তহবিল');
    }
    ভারসাম্য - = পরিমাণ;
  }
}

ব্যতিক্রমগুলি চেষ্টা / ধরা ব্লক দিয়ে ধরা যেতে পারে:

var অ্যাকাউন্ট = ব্যাংক অ্যাকাউন্ট (ব্যালেন্স: 100);
চেষ্টা করুন
  account.withdraw (50); // ঠিক আছে
  account.withdraw (200); // নিক্ষেপ
} ধরা (ঙ)
  (ঙ) প্রিন্ট; // প্রিন্টস 'ব্যতিক্রম: অপর্যাপ্ত তহবিল'
}

সুইফ্টে, আমরা যখন স্পষ্টভাবে ঘোষণা করি যে কোনও পদ্ধতি কখন ব্যতিক্রম ছুঁড়ে ফেলতে পারে। এটি থ্রো কীওয়ার্ডের সাহায্যে সম্পন্ন হয়েছে এবং কোনও ত্রুটি অবশ্যই ত্রুটি প্রোটোকলের সাথে মেনে চলতে হবে:

অ্যাকাউন্টের ত্রুটি: ত্রুটি {
  কেস অপর্যাপ্তফান্ড
}
ক্লাস ব্যাংক হিসাব {
  ভারসাম্য ভারসাম্য: ডাবল
  init (ভারসাম্য: দ্বিগুণ) {
    self.balance = ভারসাম্য
  }
  ফানক প্রত্যাহার (পরিমাণ: দ্বিগুণ) rows
    যদি পরিমাণ> ভারসাম্য {
      অ্যাকাউন্টআরর.অনুফুলফান্ডগুলি নিক্ষেপ করুন
    }
    ভারসাম্য - = পরিমাণ
  }
}

ত্রুটিগুলি পরিচালনা করার সময়, আমরা একটি ডো / ক্যাচ ব্লকের ভিতরে একটি চেষ্টা কীওয়ার্ড ব্যবহার করি।

var অ্যাকাউন্ট = ব্যাংক অ্যাকাউন্ট (ব্যালেন্স: 100)
কর {
  একাউন্ট.বিহীন ব্যবহার করুন (পরিমাণ: 50) // ঠিক আছে
  অ্যাকাউন্ট.বিহীন ব্যবহার করুন (পরিমাণ: 200) // ছোঁড়া
Account অ্যাকাউন্টআরআর.ইনফসিলফান্ডগুলি ধরুন {
  মুদ্রণ ("অপর্যাপ্ত তহবিল")
}

নিক্ষেপ করতে পারে এমন পদ্ধতিগুলিতে কল করার সময় কী কী কী কী কী কী বাধ্যতামূলক তা নোট করুন।

এবং ত্রুটিগুলি নিজেরাই দৃ strongly়ভাবে টাইপ করা হয়, যাতে সমস্ত সম্ভাব্য কেসগুলি কাভার করার জন্য আমাদের একাধিক ক্যাচ ব্লক থাকতে পারে।

চেষ্টা, চেষ্টাএবং চেষ্টা!

ত্রুটিগুলি মোকাবেলার জন্য সুইফট কম ভার্বোস উপায় প্রস্তাব করে।

আমরা চেষ্টা ব্যবহার করতে পারি? একটি ডো / ক্যাচ ব্লক ছাড়াই। এবং এর ফলে কোনও ব্যতিক্রম উপেক্ষা করা হবে:

var অ্যাকাউন্ট = ব্যাংক অ্যাকাউন্ট (ব্যালেন্স: 100)
চেষ্টা? account.withdraw (পরিমাণ: 50) // ঠিক আছে
চেষ্টা? অ্যাকাউন্ট.বিঘটাও (পরিমাণ: 200) // নিঃশব্দে ব্যর্থ হয়

বা যদি আমরা নিশ্চিত যে কোনও পদ্ধতি নিক্ষেপ করবে না, তবে আমরা চেষ্টা ব্যবহার করতে পারি!

var অ্যাকাউন্ট = ব্যাংক অ্যাকাউন্ট (ব্যালেন্স: 100)
চেষ্টা করুন! account.withdraw (পরিমাণ: 50) // ঠিক আছে
চেষ্টা করুন! account.withdraw (পরিমাণ: 200) // ক্র্যাশ

উপরের উদাহরণটির ফলে প্রোগ্রামটি ক্রাশ হয়ে যাবে। অতএব, চেষ্টা করুন! উত্পাদন কোডে প্রস্তাবিত নয়, এবং পরীক্ষা লেখার সময় এটি আরও উপযুক্ত suited

সামগ্রিকভাবে, সুইফটে ত্রুটি পরিচালনার সুস্পষ্ট প্রকৃতি API নকশায় খুব উপকারী, কারণ কোনও পদ্ধতি নিক্ষেপ করতে পারে বা করতে পারে না তা এটি সহজ করে তোলে।

তেমনি, পদ্ধতিতে কল ব্যবহার করে কোডটি যে নিক্ষেপ করতে পারে তার দিকে দৃষ্টি আকর্ষণ করে, আমাদের ত্রুটির ক্ষেত্রে বিবেচনা করতে বাধ্য করে।

এই ক্ষেত্রে, ত্রুটি পরিচালনা করা ডার্টের চেয়ে নিরাপদ এবং আরও শক্তিশালী বোধ করে।

আরও পড়ুন:

  • ডার্ট ব্যতিক্রম
  • সুইফ্ট ত্রুটি পরিচালনা

জেনেরিক্স

সুইফ্ট ডক্সের উদ্ধৃতি:

জেনেরিক কোড আপনাকে নমনীয়, পুনরায় ব্যবহারযোগ্য ফাংশন এবং প্রকারগুলি লিখতে সক্ষম করে যা কোনও ধরণের সাথে কাজ করতে পারে, আপনার যে প্রয়োজনীয় সংজ্ঞাগুলি নির্ধারণ করে সেগুলি সাপেক্ষে। আপনি এমন কোড লিখতে পারেন যা সদৃশতা এড়ায় এবং এর উদ্দেশ্যটি পরিষ্কার, বিমূর্ত পদ্ধতিতে প্রকাশ করে।

জেনেরিক্স উভয় ভাষা দ্বারা সমর্থিত।

জেনেরিকের জন্য সর্বাধিক সাধারণ ব্যবহারের ক্ষেত্রে সংগ্রহগুলি যেমন অ্যারে, সেট এবং মানচিত্র।

এবং আমরা এগুলি আমাদের নিজস্ব ধরণের সংজ্ঞায়িত করতে ব্যবহার করতে পারি। এখানে আমরা সুইফটে জেনেরিক স্ট্যাকের ধরণটি কীভাবে সংজ্ঞায়িত করব:

কাঠামো স্ট্যাক <উপাদান>>
  var আইটেম = [উপাদান] ()
  রূপান্তরকারী ফানক পুশ (_ আইটেম: উপাদান) {
    items.append (আইটেম)
  }
  রূপান্তরকারী ফানক পপ () -> উপাদান {
    ফিরিয়ে দিন
  }
}

একইভাবে, ডার্টে আমরা লিখব:

ক্লাস স্ট্যাক <উপাদান>>
  var আইটেম = <উপাদান> []
  অকার্যকর পুশ (উপাদান আইটেম) {
    items.add (আইটেম)
  }
  অকার্যকর পপ () -> উপাদান {
    ফিরিয়ে দিন
  }
}

জেনেরিকস সুইফটে খুব দরকারী এবং শক্তিশালী, যেখানে এগুলি প্রোটোকলে টাইপ সীমাবদ্ধতা এবং সম্পর্কিত প্রকারগুলি সংজ্ঞায়িত করতে ব্যবহার করা যেতে পারে।

আমি আরও তথ্যের জন্য ডকুমেন্টেশন পড়ার পরামর্শ দিচ্ছি:

  • সুইফট জেনারিক্স
  • ডার্ট জেনারিক্স

প্রবেশাধিকার নিয়ন্ত্রণ

সুইফ্ট ডকুমেন্টেশন উদ্ধৃত:

অ্যাক্সেস নিয়ন্ত্রণ অন্যান্য উত্স ফাইল এবং মডিউলগুলির কোড থেকে আপনার কোডের কিছু অংশে অ্যাক্সেসকে সীমাবদ্ধ করে। এই বৈশিষ্ট্যটি আপনাকে আপনার কোডের প্রয়োগের বিশদটি গোপন করতে এবং একটি পছন্দসই ইন্টারফেস নির্দিষ্ট করতে সক্ষম করে যার মাধ্যমে সেই কোডটি অ্যাক্সেস এবং ব্যবহার করা যেতে পারে।

সুইফটে পাঁচটি অ্যাক্সেস স্তর রয়েছে: উন্মুক্ত, পাবলিক, অভ্যন্তরীণ, ফাইল-ব্যক্তিগত এবং ব্যক্তিগত।

এগুলি মডিউল এবং উত্স ফাইলগুলির সাথে কাজ করার প্রসঙ্গে ব্যবহৃত হয়। বরাত দিয়ে:

মডিউলটি কোড বিতরণের একক একক - একটি কাঠামো বা অ্যাপ্লিকেশন যা একটি একক হিসাবে নির্মিত এবং চালিত হয় এবং এটি সুইফটের আমদানি কীওয়ার্ড সহ অন্য মডিউল দ্বারা আমদানি করা যায়।

খোলা এবং সর্বজনীন অ্যাক্সেস স্তরগুলি মডিউলগুলির বাইরের কোড অ্যাক্সেসযোগ্য করে তুলতে ব্যবহার করা যেতে পারে।

প্রাইভেট এবং ফাইল-ব্যক্তিগত অ্যাক্সেস স্তরটি সংজ্ঞায়িত করা ফাইলের বাইরে কোড অ্যাক্সেসযোগ্য না করার জন্য ব্যবহার করা যেতে পারে।

উদাহরণ:

পাবলিক ক্লাস সোম্পব্লিক ক্লাস}
অভ্যন্তরীণ শ্রেণি SomeInternClass}
ফাইলপ্রাইভেট ক্লাস সোমফিলপ্রাইভেট ক্লাস}}
প্রাইভেট ক্লাস সাম্প্রাইভেটক্লাস}}

অ্যাক্সেসের স্তরগুলি ডার্টে সহজতর এবং সরকারী এবং ব্যক্তিগত ক্ষেত্রে সীমাবদ্ধ। বরাত দিয়ে:

জাভা থেকে ভিন্ন, ডার্টের কাছে কীওয়ার্ডগুলি সর্বজনীন, সুরক্ষিত এবং ব্যক্তিগত নেই। যদি কোনও সনাক্তকারী একটি আন্ডারস্কোর _ দিয়ে শুরু হয় তবে এটি এর লাইব্রেরিতে ব্যক্তিগত।

উদাহরণ:

শ্রেণি হোমপেজ স্টেটফুল উইজেট {// সর্বজনীন প্রসারিত করে
  @অগ্রাহ্য করা
  _হোমপেজস্টেট ক্রিয়েটস্টেট () => _হোমপেজস্টেট ();
}
শ্রেণি_হোমপেজস্টেটটি  State ...} // ব্যক্তিগতকে প্রসারিত করে

অ্যাক্সেস নিয়ন্ত্রণ ডার্ট এবং সুইফ্টের জন্য বিভিন্ন লক্ষ্য নিয়ে ডিজাইন করা হয়েছিল। এবং ফলস্বরূপ অ্যাক্সেসের স্তরগুলি খুব আলাদা।

আরও পড়ুন:

  • সুইফট অ্যাক্সেস নিয়ন্ত্রণ
  • ডার্ট লাইব্রেরি এবং দৃশ্যমানতা

অ্যাসিনক্রোনাস প্রোগ্রামিং: ফিউচার

অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং এমন একটি অঞ্চল যেখানে ডার্ট সত্যিই জ্বলে।

ব্যবহারের ক্ষেত্রে যেমন ডিল করার সময় অ্যাসিক্রোনাস প্রোগ্রামিংয়ের কিছু ফর্মের প্রয়োজন হয়:

  • ওয়েব থেকে সামগ্রী ডাউনলোড করা হচ্ছে
  • ব্যাকএন্ড সার্ভিসে কথা বলা
  • একটি দীর্ঘ চলমান অপারেশন সম্পাদন করুন

এই ক্ষেত্রে মৃত্যুদন্ড কার্যকর করার মূল থ্রেডটি ব্লক না করা ভাল, যা আমাদের প্রোগ্রামগুলিকে হিমায়িত করতে পারে।

ডার্ট ডকুমেন্টেশন উদ্ধৃত:

অ্যাসিঙ্ক্রোনাস অপারেশনগুলি কোনও ক্রিয়াকলাপ শেষ হওয়ার অপেক্ষায় আপনার প্রোগ্রামটিকে অন্য কাজ শেষ করতে দেয়। ডার্ট অ্যাসিক্রোনাস অপারেশনের ফলাফলের প্রতিনিধিত্ব করতে ফিউচার অবজেক্টস (ফিউচার) ব্যবহার করে। ফিউচারের সাথে কাজ করতে, আপনি async এবং প্রতীক্ষা বা ফিউচার এপিআই ব্যবহার করতে পারেন।

উদাহরণ হিসাবে, আসুন আমরা কীভাবে এ্যাসক্রোনাস প্রোগ্রামিং ব্যবহার করতে পারি তা দেখুন:

  • সার্ভারের সাহায্যে কোনও ব্যবহারকারীকে প্রমাণীকরণ করুন
  • সুরক্ষিত সঞ্চয়স্থানে অ্যাক্সেস টোকেন সংরক্ষণ করুন
  • ব্যবহারকারীর প্রোফাইল তথ্য পান

ডার্টে এটি ফিউচারের সংমিশ্রণে async / প্রতীক্ষার মাধ্যমে করা যেতে পারে:

ভবিষ্যতের <ব্যবহারকারীর প্রোফাইলে> getUserProfile (ব্যবহারকারীর শংসাপত্রাদি) async {
  চূড়ান্ত অ্যাক্সেসটোকেন = অপেক্ষায় নেটওয়ার্কসোসর.সাইন ইন (শংসাপত্র);
  SafeStorage.storeToken (অ্যাক্সেস টোকেন, ব্যবহারকারীর শংসাপত্রের জন্য: শংসাপত্রগুলি) অপেক্ষা করুন;
  প্রত্যাশী নেটওয়ার্কসোর্সেস.জেটপ্রোফাইল (অ্যাক্সেস টোকেন);
}

সুইফটে, অ্যাসিঙ্ক / অপেক্ষা করার জন্য কোনও সমর্থন নেই এবং আমরা কেবল ক্লোজার (সমাপ্তি ব্লক) দিয়ে এটি সম্পাদন করতে পারি:

func getUserProfile (শংসাপত্রগুলি: ব্যবহারকারীর শংসাপত্র, সমাপ্তি: (_ ফলাফল: ব্যবহারকারীর প্রোফাইলে) -> বাতিল)
  নেটওয়ার্ক সার্ভিস.সাইন ইন (শংসাপত্রগুলি) {অ্যাক্সেস টোকেন
    সিকিউর স্টোরেজ.স্টোর টোকেন (অ্যাক্সেস টোকেন)
      নেটওয়ার্ক সার্ভিস.জেটপ্রোফাইল (অ্যাক্সেস টোকেন, সমাপ্তি: সমাপ্তি)
    }
  }
}

নেস্টেড সমাপ্তি ব্লকগুলির কারণে এটি "ডুমের পিরামিড" বাড়ে। এবং ত্রুটি সামলানো এই পরিস্থিতিতে খুব কঠিন হয়ে ওঠে।

ডার্টে, উপরের কোডটিতে ত্রুটিগুলি পরিচালনা করার পদ্ধতিটি getUserProfile পদ্ধতিতে কোডের আশেপাশে একটি চেষ্টা / ক্যাচ ব্লক যুক্ত করে সম্পন্ন করা হয়।

রেফারেন্সের জন্য, ভবিষ্যতে অ্যাসিঙ্ক যুক্ত / সুইফটে অপেক্ষা করার প্রস্তাব রয়েছে। এটি বিস্তারিতভাবে এখানে নথিভুক্ত করা হয়:

  • সুইফটের জন্য অ্যাসিঙ্ক / অ্যাওয়েট প্রস্তাব

এটি প্রয়োগ না করা পর্যন্ত, বিকাশকারীরা গুগল দ্বারা এই প্রতিশ্রুতি পাঠাগারগুলির মতো তৃতীয় পক্ষের গ্রন্থাগারগুলি ব্যবহার করতে পারে।

ডার্ট হিসাবে, দুর্দান্ত ডকুমেন্টেশন এখানে পাওয়া যাবে:

  • ডার্ট অ্যাসিনক্রোনাস প্রোগ্রামিং: ফিউচার

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

স্ট্রিমগুলি ডার্ট কোর লাইব্রেরির অংশ হিসাবে প্রয়োগ করা হয়, তবে সুইফটে নয়।

ডার্ট ডকুমেন্টেশন উদ্ধৃত:

একটি স্ট্রিম হ'ল অ্যাসিঙ্ক্রোনাস ইভেন্টের ক্রম।

স্ট্রিমগুলি প্রতিক্রিয়াশীল অ্যাপ্লিকেশনগুলির ভিত্তিতে হয়, যেখানে তারা রাষ্ট্র পরিচালনার ক্ষেত্রে গুরুত্বপূর্ণ ভূমিকা পালন করে।

উদাহরণস্বরূপ, সামগ্রীগুলি অনুসন্ধানের জন্য স্ট্রিমগুলি দুর্দান্ত পছন্দ, যেখানে ব্যবহারকারী প্রতিটি সময় অনুসন্ধানের ক্ষেত্রে পাঠ্য আপডেট করে প্রতি ফলাফলের একটি নতুন সেট নির্গত হয়।

স্ট্রিমগুলি সুইফট কোর লাইব্রেরিতে অন্তর্ভুক্ত নয়। তৃতীয় পক্ষের লাইব্রেরি যেমন RxSwift অফার স্ট্রিম সমর্থন এবং আরও অনেক কিছু।

স্ট্রিমগুলি একটি বিস্তৃত বিষয় যা এখানে আলোচনা করা হয় না।

আরও পড়ুন: ডার্ট অ্যাসিনক্রোনাস প্রোগ্রামিং: স্ট্রিম

স্মৃতি ব্যবস্থাপনা

ডার্ট একটি উন্নত আবর্জনা সংগ্রহের প্রকল্পের সাহায্যে মেমরি পরিচালনা করে।

সুইচ স্বয়ংক্রিয় রেফারেন্স গণনা (এআরসি) এর মাধ্যমে মেমরি পরিচালনা করে।

এটি দুর্দান্ত পারফরম্যান্সের গ্যারান্টি দেয় কারণ মেমরিটি আর ব্যবহার না করা অবিলম্বে প্রকাশ হয়।

এটি অবশ্য কম্পাইলার থেকে বোঝা আংশিকভাবে বিকাশকারীকে স্থানান্তর করে।

সুইফ্টে আমাদের জীবনচক্র এবং অবজেক্টগুলির মালিকানা সম্পর্কে চিন্তাভাবনা করা উচিত এবং ধরে রাখার চক্র এড়াতে উপযুক্ত কীওয়ার্ডগুলি (দুর্বল, শক্তিশালী, অজানা) সঠিকভাবে ব্যবহার করতে হবে।

আরও পড়ুন: সুইফ্ট স্বয়ংক্রিয় রেফারেন্স গণনা।

সংকলন এবং সম্পাদন

প্রথমত, জাস্ট-ইন-টাইম (জেআইটি) এবং সামনের সময়ের (এওটি) সংকলকগুলির মধ্যে একটি গুরুত্বপূর্ণ পার্থক্য:

জেআইটি সংকলক

ফ্লাইটে সংকলন করে একটি জেআইটি সংকলক প্রোগ্রামটি সম্পাদনের সময় চলমান।

জেআইটি সংকলকগুলি সাধারণত গতিশীল ভাষার সাথে ব্যবহৃত হয়, যেখানে টাইপগুলি সময়ের আগে নির্দিষ্ট করা হয় না। JIT প্রোগ্রামগুলি দোভাষী বা ভার্চুয়াল মেশিনের (ভিএম) মাধ্যমে চালিত হয়।

এওটি সংকলক

একটি এওটি সংকলক রানটাইমের আগে প্রোগ্রাম তৈরির সময় চালিত হয়।

এওটি সংকলক সাধারণত স্থির ভাষাগুলির সাথে ব্যবহৃত হয়, যা তথ্যের প্রকারগুলি জানে। এওটি প্রোগ্রামগুলি দেশীয় মেশিন কোডে সংকলিত হয়, যা রানটাইমগুলিতে সরাসরি হার্ডওয়্যার দ্বারা সম্পাদিত হয়।

ডাব্লুএম লেলারের এই দুর্দান্ত নিবন্ধটির উদ্ধৃতি:

উন্নয়নের সময় যখন এওটি সংকলন করা হয়, তখন এটির ফলে খুব ধীর গতির বিকাশ ঘটে (কোনও প্রোগ্রামে পরিবর্তন আনতে এবং পরিবর্তনের ফলাফলটি দেখার জন্য প্রোগ্রামটি কার্যকর করতে সক্ষম হওয়ার মধ্যে সময়)। তবে এওটি সংকলনের ফলাফল এমন প্রোগ্রামগুলিতে আসে যা রানটাইমে বিশ্লেষণ এবং সংকলনের জন্য বিরতি ছাড়াই আরও পূর্বাভাসের সাথে এবং কার্যকর করতে পারে। এওটি সংকলিত প্রোগ্রামগুলি দ্রুত সম্পাদনও শুরু করে (কারণ তারা ইতিমধ্যে সংকলিত হয়েছে)।
বিপরীতে, জেআইটি সংকলন অনেক দ্রুত বিকাশ চক্র সরবরাহ করে, তবে ধীর বা জারকিয়ার কার্যকর হতে পারে। বিশেষত, জেআইটি সংকলকদের ধীরে ধীরে প্রারম্ভকালীন সময় রয়েছে, কারণ প্রোগ্রামটি যখন চালানো শুরু হয় তখন কোড কার্যকর করার আগে জেআইটি সংকলক বিশ্লেষণ এবং সংকলন করতে হবে। গবেষণায় দেখা গেছে যে বাস্তবায়ন শুরু হতে কয়েক সেকেন্ডের বেশি সময় লাগলে অনেক লোক কোনও অ্যাপ্লিকেশন ত্যাগ করবে।

স্থিতিশীল ভাষা হিসাবে, সুইফট-সময়-সংকলিত হয়।

ডার্টটি এওটি এবং জেআইটি উভয়ই সংকলিত হতে পারে। এলোপাতাড়ি সঙ্গে ব্যবহৃত যখন এটি গুরুত্বপূর্ণ সুবিধা প্রদান করে। আবার উদ্ধৃতি:

জেআইটি সংকলন উন্নয়নের সময় ব্যবহৃত হয়, বিশেষত দ্রুতগতির একটি সংকলক ব্যবহার করে। তারপরে, যখন কোনও অ্যাপ্লিকেশন প্রকাশের জন্য প্রস্তুত হয়, এটি এওটি সংকলিত হয়। ফলস্বরূপ, উন্নত সরঞ্জামাদি এবং সংকলকগুলির সহায়তায় ডার্ট উভয় বিশ্বের সেরা প্রদান করতে পারে: অত্যন্ত দ্রুত বিকাশ চক্র এবং দ্রুত সম্পাদন এবং প্রারম্ভকালীন সময়। - ডাব্লুএম লেলার

ডার্টের সাথে আমরা উভয় বিশ্বের সেরা পাই।

সুইটটি এওটি সংকলনের মূল অসুবিধায় ভুগছে। অর্থাৎ কোডবেজের আকারের সাথে সংকলনের সময় বাড়ে।

মাঝারি আকারের অ্যাপের জন্য (10 কে এবং 100 কে লাইনের মধ্যে) কোনও অ্যাপ্লিকেশন সংকলন করতে সহজেই কয়েক মিনিট সময় নিতে পারে।

ফ্লাটার অ্যাপ্লিকেশনগুলিতে তেমন নয়, যেখানে আমরা ধারাবাহিকভাবে সাব-সেকেন্ড হট-পুনরায় লোড পাই, কোডবেজের আকার নির্বিশেষে।

অন্যান্য বৈশিষ্ট্যগুলি কভার করা হয়নি

নিম্নলিখিত বৈশিষ্ট্যগুলি ডার্ট এবং সুইফ্টে বেশ সমান হওয়ায় তাদের আচ্ছাদিত করা হয়নি:

  • অপারেটরগুলি (সুইফট এবং ডার্টের জন্য রেফারেন্স দেখুন)
  • স্ট্রিংস (সুইফট এবং ডার্টের জন্য রেফারেন্স দেখুন)
  • সুইফটে ptionচ্ছিক শৃঙ্খলা (ডার্টে শর্তাধীন সদস্য অ্যাক্সেস হিসাবে পরিচিত)।

concurrency

  • সমান্তরাল প্রোগ্রামিং এটি ডার্টে বিচ্ছিন্নভাবে সরবরাহ করা হয়।
  • সুইফট গ্র্যান্ড সেন্ট্রাল ডিসপ্যাচ (জিসিডি) এবং প্রেরণের সারি ব্যবহার করে।

আমার প্রিয় সুইফ্ট বৈশিষ্ট্যগুলি ডার্ট থেকে অনুপস্থিত

  • structs
  • সম্পর্কিত ধরনের সঙ্গে enums
  • Optionals

আমার প্রিয় ডার্ট বৈশিষ্ট্যগুলি সুইফ্ট থেকে অনুপস্থিত

  • জাস্ট-ইন-টাইম সংকলক
  • প্রত্যাশিত / অ্যাসিঙ্কের সাথে ফিউচার (ক্রিস ল্যাটনার দ্বারা প্রস্তাবিত async / প্রতীক্ষার প্রস্তাব দেখুন)
  • ফলন / অ্যাসিঙ্ক * সহ স্ট্রিমগুলি (আরএক্সসভিট প্রতিক্রিয়াশীল অ্যাপ্লিকেশনগুলির জন্য স্ট্রিমের সুপারসেট সরবরাহ করে)

উপসংহার

ডার্ট এবং সুইফট উভয়ই দুর্দান্ত ভাষা, আধুনিক মোবাইল অ্যাপ্লিকেশন এবং এর বাইরেও এটির জন্য উপযুক্ত।

উভয়েরই নিজস্ব অনন্য দৃ strong় পয়েন্ট হওয়ায় উভয়ই ভাষা উচ্চতর নয়।

মোবাইল অ্যাপ্লিকেশন বিকাশ এবং দুটি ভাষার সরঞ্জামদানের দিকে তাকানোর সময় আমি অনুভব করি যে ডার্টের হাত রয়েছে। এটি জেআইটি সংকলকটির কারণে, যা বিড়বিড় করে স্টেটফুল হট-রিলোডের ভিত্তিতে।

এবং হট-লোড অ্যাপ্লিকেশনগুলি তৈরি করার সময় একটি বিশাল উত্পাদনশীলতা লাভ দেয়, কারণ এটি বিকাশ চক্রটিকে সেকেন্ড বা মিনিট থেকে এক সেকেন্ডেরও কম গতি দেয়।

বিকাশকারী সময়টি কম্পিউটিং সময়ের চেয়ে বেশি দুর্লভ সংস্থান।

সুতরাং বিকাশকারী সময়ের জন্য অনুকূলিতকরণ একটি খুব স্মার্ট পদক্ষেপ।

অন্যদিকে, আমি অনুভব করি যে সুইফ্টের খুব শক্তিশালী টাইপ সিস্টেম রয়েছে। প্রকার সুরক্ষা সমস্ত ভাষার বৈশিষ্ট্যগুলিতে বেকড থাকে এবং আরও স্বাভাবিকভাবেই শক্তিশালী প্রোগ্রামগুলিতে নিয়ে যায়।

একবার আমরা ব্যক্তিগত পছন্দগুলি বাদ দিই, প্রোগ্রামিং ভাষাগুলি কেবলমাত্র সরঞ্জাম। এবং কাজের জন্য সবচেয়ে উপযুক্ত সরঞ্জামটি নির্বাচন করা বিকাশকারী হিসাবে আমাদের কাজ।

যাইহোক, আমরা আশা করতে পারি যে উভয় ভাষা বিকশিত হওয়ার সাথে সাথে একে অপরের কাছ থেকে সেরা ধারণা ধার করবে।

তথ্যসূত্র এবং ক্রেডিট

ডার্ট এবং সুইফট উভয়েরই একটি বিস্তৃত বৈশিষ্ট্য সেট রয়েছে এবং এখানে পুরোপুরি আবৃত হয়নি।

আমি এই নিবন্ধটি অফিশিয়াল সুইফট এবং ডার্ট ডকুমেন্টেশন থেকে ধার করার তথ্য প্রস্তুত করেছি, যা এখানে পাওয়া যাবে:

  • সুইফ্ট প্রোগ্রামিং ভাষা
  • ডার্ট ভাষার একটি ভ্রমণ

এছাড়াও, জেআইটি এবং এওটি সংকলক সম্পর্কে বিভাগটি ডাব্লুএম লেলারের এই দুর্দান্ত নিবন্ধটি দ্বারা ভারীভাবে অনুপ্রাণিত হয়েছে:

  • কেন ঝাঁকুনি ডার্ট ব্যবহার করে

আমি কিছু মিস করেছি? আমাকে জানতে দিন এই কমেন্টে.

শুভ কোডিং!

আপডেট: আমার ফ্লাটার এবং ফায়ারবেস উডেমি কোর্স এখন প্রাথমিক অ্যাক্সেসের জন্য উপলব্ধ। নাম লেখাতে এই লিঙ্কটি ব্যবহার করুন (ছাড় কোড অন্তর্ভুক্ত):

  • ফ্লাটার এবং ফায়ারবেস: আইওএস এবং অ্যান্ড্রয়েডের জন্য একটি সম্পূর্ণ অ্যাপ্লিকেশন তৈরি করুন

আরও নিবন্ধ এবং ভিডিও টিউটোরিয়ালগুলির জন্য, ফ্লটারের সাথে কোডিং দেখুন।

টুইটারে আমি @ biz84 আপনি আমার গিটহাব পৃষ্ঠাটিও দেখতে পারেন।