Skip to content

Instantly share code, notes, and snippets.

@Medvedoc
Last active May 22, 2022 05:03
Show Gist options
  • Save Medvedoc/0e5045eaf202b91e8432819e824a9df5 to your computer and use it in GitHub Desktop.
Save Medvedoc/0e5045eaf202b91e8432819e824a9df5 to your computer and use it in GitHub Desktop.
My_tasks_Dart_по_анонимным_функциям
/*
Задача 1.
Вы получите список строк. Ваша задача вернуть сумму длинны всех строк в списке.
Пример: [“a”, “ab”, “abc”] => 1 + 2 + 3 = 6
Условия:
1. Список может быть пустым, в этом случае возвращаем 0.
Входные данные:
[“a”, “ab”, “abc”]
[“abcde”, “ab”, “abc”]
[]
Выходные данные:
[“a”, “ab”, “abc”] => 6
[“abcde”, “ab”, “abc”] => 10
[] => 0
*/
void main() {
//Задание 1
print('Задание 1');
//Вариант 1
print('Вариант 1 - получение суммы длины всех строк в списке без использования функции');
//Задаем список слов
List<String> words = ['a', 'ab', 'abc'];
//Устонавливаем начальное значение длины слова
int number = 0;
//Через цикл находим длину слова и суммируем с предыдущим значением
for(String word in words) {number += word.length;}
//Выводим сумму букв всего списка
print(number);
print('\n');
//Вариант 2
print('Вариант 2 - получение суммы длины всех строк в списке с использованием функции');
List<String> words2 = ['a', 'ab', 'abc'];
int number2 = 0;
for(String word2 in words2) {
//Вызываем функцию operationNumbers и передаем в нее начальное значение суммы букв number2 и длину слова из цикла, вызывая затем анонимную функцию a+b
number2 = operationNumbers(number2, word2.length, (a,b) => a=a+b);
}
print(number2);
print('\n');
//Вариант 2.1
print('Вариант 2.1 - получение суммы длины всех строк в списке с использованием функции');
List<String> words21 = ['a', 'ab', 'abc', 'abcde'];
//Метод fold последовательно вызывает пользовательскую callback-функцию dynamic combine(var previousValue, E element), передавая ей результат её выполнения на предыдущей итерации и очередной элемент массива, пока не будет обработана вся коллекция
int number21 = words21.fold(0, (a, b) => a + b.length);
print(number21);
print('\n');
//Вариант 2.2
print('Вариант 2.2 - получение суммы длины всех строк в списке с использованием функции');
List<String> words22 = ['a', 'ab', 'abc', 'abcde'];
//Статическая функция parse позволяет анализировать строку, содержащую числовой литерал, в число
print(int.parse(words22.fold(0, (a, b) => a + b.length).toString()));
print('\n');
//Вариант 3
print('Вариант 3 - получение суммы длины всех строк путем перебора всех списков с использование функции');
var words3 = [['a', 'ab', 'abc'],['abcde', 'ab', 'abc'],[]];
for (int i=0;i<words3.length;i++){
int number3=0;
for(String word2 in words3[i]) {
number3 = operationNumbers(number3, word2.length, (a,b) => a=a+b);
}
print(number3);
}
print('\n');
}
int operationNumbers (int a, int b, Function operation) {
return operation(a,b);
}
@valitoshka
Copy link

Привет, можно ли считать что в моем коде есть анонимная функция?

void main() {
Function sumLengthString = (List string){
int sum = (string.join()).toString().length;
print(sum);
};
sumLengthString(['a', 'ab', 'abc']);
sumLengthString(['abcde', 'ab', 'abc']);
sumLengthString([]);
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment