Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

.NET und C# ohne Web?

4812  1 2 3 4 5 6 7 8 9 10 все
alex445 местный житель19.05.21 17:06
NEW 19.05.21 17:06 
в ответ Hryu 19.05.21 14:06, Последний раз изменено 19.05.21 17:08 (alex445)
Ты там в резЮме вообще не пиши эти смешные буквы В1 и В2. Пусть сами выясняют твой уровень по телефону. Просто тупо пиши "знаю немецкий". И да, убери про знание таджикского.

Wirklich?.. Nein. WIRKLICH??


(чего картинки из буфера не вставляются? во время редактирования вставляются, а после отправки поста - исчезают)




#21 
AlexNek патриот19.05.21 17:20
AlexNek
NEW 19.05.21 17:20 
в ответ Программист 19.05.21 15:45

А чем плохо так?

double circumference = CalculateCircle(radious, out double area); 
#22 
alex445 местный житель19.05.21 17:30
NEW 19.05.21 17:30 
в ответ Программист 19.05.21 15:45, Последний раз изменено 19.05.21 17:40 (alex445)
Как по-мне, кортежи в первую очередь с точки зрения читабельности кода не самая удобная штука. 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}");
}
#23 
alex445 местный житель19.05.21 17:38
NEW 19.05.21 17:38 
в ответ AlexNek 19.05.21 17:20, Последний раз изменено 19.05.21 17:42 (alex445)
double circumference = CalculateCircle(radious, out double area); 

Так лучше


(double circumference, double area) CalculateCircle(double radius);
var circleData = CalculateCircle(radius); 
#24 
Murr патриот19.05.21 20:12
Murr
NEW 19.05.21 20:12 
в ответ alex445 19.05.21 13:46

Но это ведь всё изучить надо.

-----

Что именно надо изучатъ?

Что там есть такого нового, что не входит в парадигму ООП и что не было имплементированно в других языках?

Ну наберется там с 5-10 страниц описания новинок. И это должно стоить того чтобы говорить - "там столько надо учить-учить"?

Или может надо было в "школе" научится эффективно (само)обучатся?


заменяет out-параметры?

-----

А то, что наличие оут-параметров нарушало школьное определение функции тебе не мешало?

В вопросе возврата чего-то из функции меня больше интересует где будет размещен результат - куча? стек? - область его видимости и время существования. А вернуть можно хоть структуру, хоть массив объектов - с этим проблем не было со времен Пуре Си...

#25 
Murr патриот19.05.21 20:18
Murr
NEW 19.05.21 20:18 
в ответ Программист 19.05.21 15:45

Хотя еще удобнее было бы просто сделать возврат класса/интерфейса

-----

Ну так нормальные прогеры так и писали.

Вот только билли много кода переделывать надо было бы. Да и плюсовые параметры типа "ссылка" заменить сложно...

#26 
Murr патриот19.05.21 20:23
Murr
NEW 19.05.21 20:23 
в ответ AlexNek 19.05.21 17:20

Тем, что по определению функция это отображние (х1,х2,х3,...,хн) => (у1,у2,...,ун)...

варианта - => (у1) и (у2,...,ун) - в определении не предусмотрено.

#27 
AlexNek патриот19.05.21 20:34
AlexNek
NEW 19.05.21 20:34 
в ответ Murr 19.05.21 20:23

Понятно, так тебе больше нравится бебе

double area;
double circumference = CalculateCircle(radious, out area); 
#28 
MrSanders коренной житель19.05.21 20:49
NEW 19.05.21 20:49 
в ответ AlexNek 19.05.21 20:34

Прынцып наименьшего удивления, сэр. То что мы посчитали, надо возвращать в результатах, а не пихать в дурные параметры.

Жутко не хватает кортежей в яве. Лучше б оракл их вместо лямбд добавил...

#29 
Программист коренной житель19.05.21 21:00
NEW 19.05.21 21:00 
в ответ alex445 19.05.21 17:30

Про именованные не знал. Так это конечно удобно. Но работает начиная с .Net 4.7.

#30 
AlexNek патриот19.05.21 21:01
AlexNek
NEW 19.05.21 21:01 
в ответ MrSanders 19.05.21 20:49
То что мы посчитали, надо возвращать в результатах

А разве мы обсуждаем хорошо или плохо иметь out параметры?

#31 
Программист коренной житель19.05.21 21:08
NEW 19.05.21 21:08 
в ответ AlexNek 19.05.21 17:20

так плохо тем, что area надо определять перед вызовом.

ну и еще надо помнить разницу между out и ref :D Я уж не говорю о том, что функция должна заниматься чем-то одним :)

#32 
schizo коренной житель19.05.21 21:09
schizo
NEW 19.05.21 21:09 
в ответ alex445 19.05.21 13:47

я Вам уже говорил когда-то: рассылайтесь веерно и не ждите окончания обучения, за ними начнутся другие курсы, а потом ещё одни

Вы когда начнёте работать, увидите, каких дятлов тут иногда за кодеров держат и будет обидно за упущенное время

Храни Вас Г-дь!
#33 
Murr патриот19.05.21 21:23
Murr
NEW 19.05.21 21:23 
в ответ AlexNek 19.05.21 20:34

Да вроде как Я такого не говорил.

TСircumference circumference = TCalculator.CalculateCircle(circle);
#34 
AlexNek патриот19.05.21 21:34
AlexNek
NEW 19.05.21 21:34 
в ответ Murr 19.05.21 21:23
Да вроде как Я такого не говорил

А я имел в виду именно это - было одно, стало другое смущ. А лучше или хуже out параметры это уже вопрос конкретного использования, причем не имеющий никакой связи с тем что я хотел сказать.


Ну а любители кортежей могут попробовать написать получше хотя бы это

if(int.TryParse(strData, out int age))
{
  Console.WriteLine($"Age:{age}");
}
#35 
MrSanders коренной житель19.05.21 21:39
NEW 19.05.21 21:39 
в ответ AlexNek 19.05.21 21:34

А зачем тут кортеж? Я бы не булеан возвращал а прочитанный инт. Не можешь прочитать - кидай эксепшен.

#36 
AlexNek патриот19.05.21 21:50
AlexNek
NEW 19.05.21 21:50 
в ответ MrSanders 19.05.21 21:39
Не можешь прочитать - кидай эксепшен

А знаете, что происходит в виуал студии при отладке и ожившим эксепшен?


Я бы не булеан возвращал

это надо было микрософту сказать лет х этак назад спок

#37 
Программист коренной житель19.05.21 22:18
NEW 19.05.21 22:18 
в ответ MrSanders 19.05.21 21:39
А зачем тут кортеж? Я бы не булеан возвращал а прочитанный инт. Не можешь прочитать - кидай эксепшен.

Именно так ведет себя int.Parse (), а int.TryParse() как раз не должен кидать исключений (как и любая другая функция, имя которой начинается с Try)

Но с кортежем это не будет выглядеть лучше :)

#38 
Программист коренной житель19.05.21 22:20
NEW 19.05.21 22:20 
в ответ AlexNek 19.05.21 21:50
А знаете, что происходит в виуал студии при отладке и ожившим эксепшен?

Эээээ... что?

#39 
Murr патриот19.05.21 22:24
Murr
NEW 19.05.21 22:24 
в ответ MrSanders 19.05.21 21:39

Не можешь прочитать - кидай эксепшен.

-----

Кидай эксептион, лови эксептион, обрабатывай эксептион...

Можно, но меньше кода не станет.

Вместе с тем - есть нуллабле типы - не можешь - верни нулл и не парься...спок

#40 
1 2 3 4 5 6 7 8 9 10 все