.NET und C# ohne Web?
Ты там в резЮме вообще не пиши эти смешные буквы В1 и В2. Пусть сами выясняют твой уровень по телефону. Просто тупо пиши "знаю немецкий". И да, убери про знание таджикского.
Wirklich?.. Nein. WIRKLICH??
(чего картинки из буфера не вставляются? во время редактирования вставляются, а после отправки поста - исчезают)
Как по-мне, кортежи в первую очередь с точки зрения читабельности кода не самая удобная штука. out-параметры гораздо удобнее. Хотя еще удобнее было бы просто сделать возврат класса/интерфейса с одними геттерами :)
Почему не удобно? Даже в версии 7.3 языка уже можно давать осмысленные имена элементам кортежа. В примере ниже при выводе в консоль res.sum и res.count подсвечиваются IntelliSense (тут и код нормально не вставляется). Хреново видно, т.к. разметки для кода нет, но и так понятно - возврат из метода кортежа с осмысленными названиями полей, результат возврата - тоже кортеж с осмысленными названиями, интеллисенс сразу всё подхватывает и подсвечивает. Возиться с предварительным объявлением аут-параметров не надо, классы объявлять не надо. Вобщем, очень похоже на анонимные типы, только тут неявный кортеж (без явного объявления Tuple). В теле метода специально назвал переменные с единичкой в конце, чтобы показать, что имена возвращаемых полей кортежа определяются в возврате метода.
public static (int sum, int count) SumNumbers(IEnumerable<int> sequence) { int sum1 = 0; int count1 = 0; foreach (var value in sequence) { sum1 += value; count1++; } return (sum1, count1); } static void Main(string[] args) { var res = SumNumbers(Enumerable.Range(1, 5)); Console.WriteLine($"Sum: {res.sum}, Count: {res.count}"); }
double circumference = CalculateCircle(radious, out double area);
Так лучше
(double circumference, double area) CalculateCircle(double radius); var circleData = CalculateCircle(radius);
Но это ведь всё изучить надо.
-----
Что именно надо изучатъ?
Что там есть такого нового, что не входит в парадигму ООП и что не было имплементированно в других языках?
Ну наберется там с 5-10 страниц описания новинок. И это должно стоить того чтобы говорить - "там столько надо учить-учить"?
Или может надо было в "школе" научится эффективно (само)обучатся?
заменяет out-параметры?
-----
А то, что наличие оут-параметров нарушало школьное определение функции тебе не мешало?
В вопросе возврата чего-то из функции меня больше интересует где будет размещен результат - куча? стек? - область его видимости и время существования. А вернуть можно хоть структуру, хоть массив объектов - с этим проблем не было со времен Пуре Си...
Хотя еще удобнее было бы просто сделать возврат класса/интерфейса
-----
Ну так нормальные прогеры так и писали.
Вот только билли много кода переделывать надо было бы. Да и плюсовые параметры типа "ссылка" заменить сложно...
Тем, что по определению функция это отображние (х1,х2,х3,...,хн) => (у1,у2,...,ун)...
варианта - => (у1) и (у2,...,ун) - в определении не предусмотрено.
Понятно, так тебе больше нравится
double area; double circumference = CalculateCircle(radious, out area);
Прынцып наименьшего удивления, сэр. То что мы посчитали, надо возвращать в результатах, а не пихать в дурные параметры.
Жутко не хватает кортежей в яве. Лучше б оракл их вместо лямбд добавил...
Про именованные не знал. Так это конечно удобно. Но работает начиная с .Net 4.7.
То что мы посчитали, надо возвращать в результатах
А разве мы обсуждаем хорошо или плохо иметь out параметры?
так плохо тем, что area надо определять перед вызовом.
ну и еще надо помнить разницу между out и ref :D Я уж не говорю о том, что функция должна заниматься чем-то одним :)
я Вам уже говорил когда-то: рассылайтесь веерно и не ждите окончания обучения, за ними начнутся другие курсы, а потом ещё одни
Вы когда начнёте работать, увидите, каких дятлов тут иногда за кодеров держат и будет обидно за упущенное время
Да вроде как Я такого не говорил.
TСircumference circumference = TCalculator.CalculateCircle(circle);
Да вроде как Я такого не говорил
А я имел в виду именно это - было одно, стало другое . А лучше или хуже out параметры это уже вопрос конкретного использования, причем не имеющий никакой связи с тем что я хотел сказать.
Ну а любители кортежей могут попробовать написать получше хотя бы это
if(int.TryParse(strData, out int age)) { Console.WriteLine($"Age:{age}"); }
А зачем тут кортеж? Я бы не булеан возвращал а прочитанный инт. Не можешь прочитать - кидай эксепшен.
Не можешь прочитать - кидай эксепшен
А знаете, что происходит в виуал студии при отладке и ожившим эксепшен?
Я бы не булеан возвращал
это надо было микрософту сказать лет х этак назад
А зачем тут кортеж? Я бы не булеан возвращал а прочитанный инт. Не можешь прочитать - кидай эксепшен.
Именно так ведет себя int.Parse (), а int.TryParse() как раз не должен кидать исключений (как и любая другая функция, имя которой начинается с Try)
Но с кортежем это не будет выглядеть лучше :)
Не можешь прочитать - кидай эксепшен.
-----
Кидай эксептион, лови эксептион, обрабатывай эксептион...
Можно, но меньше кода не станет.
Вместе с тем - есть нуллабле типы - не можешь - верни нулл и не парься...