ডার্টে নামযুক্ত এবং অবস্থানগত পরামিতিগুলির মধ্যে পার্থক্য কী?


146

ডার্ট নামযুক্ত namedচ্ছিক পরামিতি এবং অবস্থানগত optionচ্ছিক পরামিতি উভয় সমর্থন করে। দুই মধ্যে পার্থক্য কি কি?

এছাড়াও, আপনি কীভাবে বলতে পারেন যে anচ্ছিক প্যারামিটারটি নির্দিষ্টভাবে নির্দিষ্ট করা হয়েছিল?

উত্তর:


272

ডার্টের দুটি ধরণের alচ্ছিক প্যারামিটার রয়েছে: নামযুক্ত এবং অবস্থানগত । আমি পার্থক্যগুলি আলোচনা করার আগে প্রথমে মিলগুলি নিয়ে আলোচনা করবো discuss

ডার্ট এর ঐচ্ছিক প্যারামিটার হয় ঐচ্ছিক যে আহ্বানকারী যখন ফাংশন কলিং পরামিতি জন্য একটি মান নির্দিষ্ট করার প্রয়োজন হয় না হবে।

Requiredচ্ছিক পরামিতিগুলি কোনও প্রয়োজনীয় প্যারামিটারের পরেই ঘোষণা করা যেতে পারে।

Alচ্ছিক পরামিতিগুলির একটি ডিফল্ট মান থাকতে পারে, যা কলার যখন কোনও মান নির্দিষ্ট করে না তখন ব্যবহৃত হয়।

অবস্থানগত optionচ্ছিক পরামিতি

একটি প্যারামিটার মোড়ানো [ ]একটি অবস্থানগত alচ্ছিক পরামিতি। এখানে একটি উদাহরণ:

getHttpUrl(String server, String path, [int port=80]) {
  // ...
}

উপরের portকোডটিতে optionচ্ছিক এবং এর ডিফল্ট মান রয়েছে 80

getHttpUrlতৃতীয় প্যারামিটারের সাথে বা ছাড়াই আপনি কল করতে পারেন ।

getHttpUrl('example.com', '/index.html', 8080); // port == 8080
getHttpUrl('example.com', '/index.html');       // port == 80

আপনি কোনও ফাংশনের জন্য একাধিক অবস্থানগত পরামিতি নির্দিষ্ট করতে পারেন:

getHttpUrl(String server, String path, [int port=80, int numRetries=3]) {
  // ...
}

Specifyচ্ছিক পরামিতিগুলি অবস্থানগত যে আপনি portউল্লেখ করতে চাইলে আপনি বাদ দিতে পারবেন না numRetries

getHttpUrl('example.com', '/index.html');
getHttpUrl('example.com', '/index.html', 8080);
getHttpUrl('example.com', '/index.html', 8080, 5);

অবশ্যই, আপনি যদি না জানেন যে 8080 এবং 5 কী হয়, তবে স্পষ্টতই যাদুর সংখ্যাগুলি কী তা বলা শক্ত। আপনি আরও পঠনযোগ্য এপিআই তৈরি করতে নামযুক্ত optionচ্ছিক পরামিতি ব্যবহার করতে পারেন ।

নামযুক্ত optionচ্ছিক পরামিতি

মোড়ানো একটি প্যারামিটার { }হ'ল নামযুক্ত namedচ্ছিক প্যারামিটার। এখানে একটি উদাহরণ:

getHttpUrl(String server, String path, {int port = 80}) {
  // ...
}

getHttpUrlতৃতীয় প্যারামিটারের সাথে বা ছাড়াই আপনি কল করতে পারেন । ফাংশনটি কল করার সময় আপনাকে অবশ্যই প্যারামিটারের নামটি ব্যবহার করতে হবে

getHttpUrl('example.com', '/index.html', port: 8080); // port == 8080
getHttpUrl('example.com', '/index.html');             // port == 80

আপনি কোনও ফাংশনের জন্য একাধিক নামযুক্ত পরামিতি নির্দিষ্ট করতে পারেন:

getHttpUrl(String server, String path, {int port = 80, int numRetries = 3}) {
  // ...
}

নামযুক্ত প্যারামিটারগুলি নাম অনুসারে রেফারেন্স করা হয়, সেগুলি তাদের ঘোষণার থেকে পৃথক ক্রমে ব্যবহার করা যেতে পারে।

getHttpUrl('example.com', '/index.html');
getHttpUrl('example.com', '/index.html', port: 8080);
getHttpUrl('example.com', '/index.html', port: 8080, numRetries: 5);
getHttpUrl('example.com', '/index.html', numRetries: 5, port: 8080);
getHttpUrl('example.com', '/index.html', numRetries: 5);

আমি বিশ্বাস করি নামযুক্ত প্যারামিটারগুলি সহজে বোঝার জন্য কল সাইটগুলি তৈরি করে, বিশেষত যখন বুলিয়ান পতাকা বা প্রাসঙ্গিক নম্বর থাকে when

Ckingচ্ছিক প্যারামিটার সরবরাহ করা হয়েছিল কিনা তা পরীক্ষা করা হচ্ছে

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

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

thisFunctionWontWork(String foo, [String positonal], {String named}) {
  // will not work!
}

4
? অপারেটর অবচয় করা হয়েছে। আমি ডার্ট টিউটোরিয়ালে কেবলমাত্র স্কেল == নাল অবস্থা পেয়েছি। (expr1? expr2: expr3 এখনও কাজ করে)
Zdeněk Mlčoch

1
কোনও ফাংশনের জন্য একাধিক নামকৃত পরমকে ভালবাসা, এটি খুঁজে পাওয়া শক্ত ছিল! ডক্সের কনস্ট্রাক্টর অংশে আরও ভাল দেখতে পাবেন? ;)
উইসকিয়ার

1
ডিফল্ট মান এখন নির্ধারণ করা উচিত =পরিবর্তে :অনুযায়ী, dartlang.org/guides/language/...
nbro

31

আমার বোঝার সাথে ডার্টে, পদ্ধতি প্যারামিটার দুটি ধরণের দেওয়া যেতে পারে।

  • প্রয়োজনীয় প্যারামিটার
  • Alচ্ছিক প্যারামিটার (অবস্থানগত, নামযুক্ত এবং ডিফল্ট)

>> প্রয়োজনীয় প্যারামিটার

প্রয়োজনীয় প্যারামিটার হ'ল একটি পুরাতন স্টাইলের প্যারামিটার যা আমরা সকলেই এর সাথে পরিচিত

উদাহরণ :

findVolume(int length, int breath, int height) {
 print('length = $length, breath = $breath, height = $height');
}

findVolume(10,20,30);

আউটপুট:

length = 10, breath = 20, height = 30

>> ptionচ্ছিক অবস্থানগত পরামিতি

বর্গাকার বন্ধনী [] এর সাথে পরামিতি প্রকাশ করা হবে এবং স্কোয়ার বন্ধনী পরামিতিগুলি alচ্ছিক।

উদাহরণ:

findVolume(int length, int breath, [int height]) {
 print('length = $length, breath = $breath, height = $height');
}

findVolume(10,20,30);//valid
findVolume(10,20);//also valid

আউটপুট:

length = 10, breath = 20, height = 30
length = 10, breath = 20, height = null // no value passed so height is null

>> Nameচ্ছিক নামযুক্ত প্যারামিটার

  • প্যারামিটারটি কোঁকড়ানো বন্ধনী দিয়ে প্রকাশ করা হবে {}
  • কোঁকড়ানো বন্ধনী পরামিতি alচ্ছিক।
  • কোলানের সাথে পৃথক হওয়া কোনও মান নির্ধারণ করতে প্যারামিটারের নাম ব্যবহার করতে হবে :
  • কোঁকড়া বন্ধনী প্যারামিটার ক্রমে কিছু যায় আসে না
  • এই ধরণের প্যারামিটারটি এমন কোনও ফাংশনের মান বহন করার সময় বিভ্রান্তি এড়াতে সহায়তা করে যার অনেকগুলি পরামিতি রয়েছে।

উদাহরণ:

findVolume(int length, int breath, {int height}) {
 print('length = $length, breath = $breath, height = $height');
}

findVolume(10,20,height:30);//valid & we can see the parameter name is mentioned here.
findVolume(10,20);//also valid

আউটপুট:

length = 10, breath = 20, height = 30
length = 10, breath = 20, height = null

>> Defচ্ছিক ডিফল্ট প্যারামিটার

  • namedচ্ছিক নামের প্যারামিটারের মতো একই সাথে আমরা এই প্যারামিটারের জন্য ডিফল্ট মান নির্ধারণ করতে পারি।
  • যার অর্থ কোনও মান পাস করা হয় না এই ডিফল্ট মানটি নেওয়া হবে।

উদাহরণ:

findVolume(int length, int breath, {int height=10}) {
 print('length = $length, breath = $breath, height = $height');
} 

findVolume(10,20,height:30);//valid
findVolume(10,20);//valid 

আউটপুট:

length = 10, breath = 20, height = 30
length = 10, breath = 20, height = 10 // default value 10 is taken

এই ভিডিও লিঙ্ক থেকে প্রদত্ত স্পষ্ট ব্যাখ্যাটির জন্য ধন্যবাদ, ভিডিও নির্মাতার কাছে ক্রেডিট।

ভিডিও লিঙ্ক: ptionচ্ছিক অবস্থানগত প্যারামিটার

ভিডিও লিঙ্ক: Nচ্ছিক নামযুক্ত প্যারামিটার

ভিডিও লিঙ্ক: ptionচ্ছিক ডিফল্টপ্যারামিটার


3

"প্যারামনেম: মান" সিনট্যাক্স ব্যবহার করে যখন কোনও ফাংশনের প্যারামিটার নির্দিষ্ট করা থাকে, তখন এটি একটি নামযুক্ত প্যারামিটার হয়। এই জাতীয় পরামিতিগুলি [এবং] বন্ধনীগুলির মধ্যে বদ্ধ করে alচ্ছিক রেন্ডার করা যেতে পারে। নিম্নলিখিত হ্যালো ওয়ার্ল্ড প্রোগ্রামে এই ফাংশনটির একটি প্রাথমিক উত্সাহ প্রদর্শন করা যেতে পারে:

sayHello([String name = ' World!']) {
  print('Hello, ${name}');
}

void main() {
  sayHello('Govind');
}

2

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

আমার মতে, namedপরামিতিগুলির চেয়ে বেশি কঠোর positional। উদাহরণস্বরূপ, যদি আপনি এই জাতীয় পদ্ধতি ঘোষণা করেন:

String say({String from, String msg})

সর্বোপরি fromএবং msgহয় namedযখন আপনি পদ্ধতি কল, পরামিতি sayআপনি ব্যবহার করা আবশ্যক say(from: "xx", msg: "xx")। কীগুলি অনুপস্থিত থাকতে পারে না।

তবে আপনি যদি অবস্থানগত পরামিতি ব্যবহার করেন তবে আপনি মুক্ত।


দস্তাবেজটি বলেছেন:> ptionচ্ছিক পরামিতিগুলির নামকরণ বা অবস্থানগত হতে পারে তবে উভয়ই নয়। এটি কোথায় বলে যে অবস্থানগত পরামিতিগুলি alচ্ছিক?
মার্কন 21

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

0

অবস্থানগত পরামিতি:

এগুলি ডিফল্ট পরামিতিগুলির মতো। উদাহরণ স্বরূপ:

void add(int x, [int y = 3]);

এখানে y এর ডিফল্ট মান 3 হয়

নামযুক্ত পরামিতি:

এগুলি হল প্যারামিটারগুলি যা পাসওয়ার্ডটির পরে প্যারামিটারের নামটি পাস করে যে কোনও ক্রমে পাস করা যেতে পারে। উদাহরণ স্বরূপ:

void sum({int num1, int num2});

এই ফাংশনটিকে এভাবে বলা হয়:

sum(num1: 12, num2: 24);

নামযুক্ত পরামিতিগুলির ডিফল্ট মানও থাকতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.