Відповіді:
Dart має два типи необов’язкових параметрів: іменований та позиційний . Перш ніж я обговорюю відмінності, дозвольте спочатку обговорити подібність.
Необов'язкові параметри Дарта є необов'язково в тому , що абонент не потрібно вказувати значення параметра при виклику функції.
Необов’язкові параметри можуть бути оголошені лише після необхідних параметрів.
Необов’язкові параметри можуть мати значення за замовчуванням, яке використовується, коли абонент не вказує значення.
Позиційні необов'язкові параметри
Параметр, який завершено, [ ]
- це необов'язковий позиційний параметр. Ось приклад:
getHttpUrl(String server, String path, [int port=80]) {
// ...
}
У наведеному вище коді port
є необов’язковим і має значення за замовчуванням 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]) {
// ...
}
Необов’язкові параметри розташовані таким чином, що ви не можете опустити їх, port
якщо хочете вказати numRetries
.
getHttpUrl('example.com', '/index.html');
getHttpUrl('example.com', '/index.html', 8080);
getHttpUrl('example.com', '/index.html', 8080, 5);
Звичайно, якщо ви не знаєте, що таке 8080 і 5, важко сказати, що це за магічні числа. Ви можете використовувати названі необов'язкові параметри для створення більш читабельних API.
Названі необов'язкові параметри
Параметр, завернутий яким { }
, називається необов'язковим параметром. Ось приклад:
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);
Я вважаю, що названі параметри полегшують розуміння сайтів викликів, особливо коли булеві прапори або номери поза контекстом.
Перевірка наявності додаткового параметра
На жаль, ви не можете розмежовувати випадки "необов'язковий параметр не надано" та "необов'язковий параметр був наданий зі значенням за замовчуванням".
Примітка. Ви можете використовувати додаткові параметри позиції або названі необов'язкові параметри, але не обидва в одній функції або методі. Наступне заборонено.
thisFunctionWontWork(String foo, [String positonal], {String named}) {
// will not work!
}
=
замість :
, відповідно до dartlang.org/guides/language/… .
У Dart, наскільки я розумію, параметр методу може бути заданий у два типи.
>> Обов’язковий параметр
Обов’язковий параметр - це добре відомий параметр старого стилю, який ми всі знайомі з ним
приклад :
findVolume(int length, int breath, int height) {
print('length = $length, breath = $breath, height = $height');
}
findVolume(10,20,30);
вихід:
length = 10, breath = 20, height = 30
>> Додатковий позиційний параметр
параметр буде розкрито квадратною дужкою [] , а параметр квадратного дужки є необов'язковим.
приклад:
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
>> Необов’язковий іменований параметр
приклад:
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
>> Необов’язковий параметр за замовчуванням
приклад:
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
дякуємо за чітке пояснення, надане з цього відеопосилання, кредити для творця відео.
відео посилання: Необов’язковіПозиційніПараметри
посилання на відео: Необов’язковіNamedParameters
посилання на відео: Необов’язкові параметри за замовчуванням
Коли параметр функції задається за допомогою синтаксису "paramName: value", то це іменований параметр. Такі параметри можна зробити необов'язковими, уклавши їх між [і] дужками. Рудиментарна демонстрація цієї функції може бути продемонстрована в наступній програмі Hello World:
sayHello([String name = ' World!']) {
print('Hello, ${name}');
}
void main() {
sayHello('Govind');
}
Від doc ми отримуємо, що обидва positional
та named
параметри необов’язкові, це означає, що всі вони можуть бути відсутніми.
На мою думку, named
параметри суворіші за параметри positional
. Наприклад, якщо ви заявляєте про такий спосіб:
String say({String from, String msg})
Вище from
і msg
є named
параметрами, коли ви викликаєте метод, який say
ви повинні використовувати say(from: "xx", msg: "xx")
. Ключі не можуть бути відсутніми.
Однак якщо ви використовуєте позиційні параметри, ви вільні.
Named
параметри називаються так, тому що ви можете насправді їх ідентифікувати за назвою, а не за позицією (якщо ви переключите положення двох названих парам, це не має значення). Дивіться відповідь вище від Savaranaraja
Позиційні параметри:
Вони такі ж, як і параметри за замовчуванням. Наприклад:
void add(int x, [int y = 3]);
Тут y має значення за замовчуванням 3
Названі параметри:
Це параметри, які можна передавати в будь-якому порядку, передаючи ім'я параметра, за яким слід передане значення. Наприклад:
void sum({int num1, int num2});
Ця функція називається так:
sum(num1: 12, num2: 24);
Також названі параметри також можуть мати значення за замовчуванням.