Информация об изменениях

Сообщение Re[7]: [Ann] .Net Core roadmap от 18.07.2016 11:47

Изменено 18.07.2016 21:08 Jack128

Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, Jack128, Вы писали:


J>>Update:

J>>Просто я не могу понять эту логику:
J>>1) Вводим тучу методов, а-ля TryParse(string s, out XXX value)
J>>2) Вводим в язык ПМ.
J>>3) Вместо того, чтоб добавить Option<XXX> TryParse(string s), который отлично ложится на пункт 2), вводим в язык новую конструкцию, облегчающую использование исходного TryParse

S>То, что у тебя появился новый инструмент вовсе не означает необходимость использовать.


S>Не, есть конечно ортодоксы, которые предпочитают всегда и везде использовать var
Автор: Sinix
Дата: 02.04.16
или method group
Автор: Sinix
Дата: 04.03.11
, ловить грабли с extension methods
Автор: Sinix
Дата: 20.04.16
или с string interpolation
Автор: Sinix
Дата: 31.03.16
и тыды и тыпы. Причём не по какой-то объективной причине, а просто потому что фишка появилась / анализ кода посоветовал.


S>Но это не значит, что остальным надо поступать так же.


S>Сравни сам

S>
S>if (double.TryParse(text, out var parsed))
S>{
S>  WriteLine(parsed);
S>}

S>// vs
S>if (double.TryParse(text) is Some(var parsed)) // в c#7/8 оно примерно так выглядит
S>{
S>  WriteLine(parsed);
S>}
S>

S>Про то, как будет выглядеть метод с парой out — не советую. Съедят

if (MyParser.TryParse(text, out var left, out var right) { WriteLine($"{left} - {right}") }
if (MyParser.TryParse(text) is Some(var parsed)) { WriteLine($"{parsed.Left} - {parsed.Right}") }

не, те хочется сразу по переменным разложить parsed, то по идее, что то такое должно сработать:
if (MyParser.TryParse(text) is Some (( var left, var right ))) { WriteLine($"{left} - {right}") } // ага, двойные скобки -)

Ну и два out параметра сами по себе тот еще запашок имеют..


Ну из твоих примеров, я вижу, что лучший вариант, использование Nullable + допилить PM, чтоб это был PM, а не тупой typetest.
Тогда можно было и так:
var data = WebHelpers.TrySendRequest(param)?.Result.SomeField?.ToString();

и так писать:
if (MyDouble.TryParse(text) is (true, var parsed)) // double? MyDouble.TryParse(string text)
{
   WriteLine(parsed);
}


А на счет out var, если я правильно понял, то if (int.TryParse(str, out var value) {} — value видно только внутри скобок
Тогда такой код:
    if (!int.TryParse(str, out value value)) return false;
    // тут юзаем value


будет в пролете. Если так, то уж совсем криво этот синтаксис выглядит.
Re[7]: [Ann] .Net Core roadmap
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, Jack128, Вы писали:


J>>Update:

J>>Просто я не могу понять эту логику:
J>>1) Вводим тучу методов, а-ля TryParse(string s, out XXX value)
J>>2) Вводим в язык ПМ.
J>>3) Вместо того, чтоб добавить Option<XXX> TryParse(string s), который отлично ложится на пункт 2), вводим в язык новую конструкцию, облегчающую использование исходного TryParse

S>То, что у тебя появился новый инструмент вовсе не означает необходимость использовать.


S>Не, есть конечно ортодоксы, которые предпочитают всегда и везде использовать var
Автор: Sinix
Дата: 02.04.16
или method group
Автор: Sinix
Дата: 04.03.11
, ловить грабли с extension methods
Автор: Sinix
Дата: 20.04.16
или с string interpolation
Автор: Sinix
Дата: 31.03.16
и тыды и тыпы. Причём не по какой-то объективной причине, а просто потому что фишка появилась / анализ кода посоветовал.


S>Но это не значит, что остальным надо поступать так же.


S>Сравни сам

S>
S>if (double.TryParse(text, out var parsed))
S>{
S>  WriteLine(parsed);
S>}

S>// vs
S>if (double.TryParse(text) is Some(var parsed)) // в c#7/8 оно примерно так выглядит
S>{
S>  WriteLine(parsed);
S>}
S>

S>Про то, как будет выглядеть метод с парой out — не советую. Съедят

if (MyParser.TryParse(text, out var left, out var right) { WriteLine($"{left} - {right}") }
if (MyParser.TryParse(text) is Some(var parsed)) { WriteLine($"{parsed.Left} - {parsed.Right}") }

не, те хочется сразу по переменным разложить parsed, то по идее, что то такое должно сработать:
if (MyParser.TryParse(text) is Some (( var left, var right ))) { WriteLine($"{left} - {right}") } // ага, двойные скобки -)

Ну и два out параметра сами по себе тот еще запашок имеют..


Ну из твоих примеров, я вижу, что лучший вариант, использование Nullable + допилить PM, чтоб это был PM, а не тупой typetest.
Тогда можно было и так:
var data = WebHelpers.TrySendRequest(param)?.Result.SomeField?.ToString();

и так писать:
if (MyDouble.TryParse(text) is (true, var parsed)) // double? MyDouble.TryParse(string text)
{
   WriteLine(parsed);
}


А на счет out var, если я правильно понял, то if (int.TryParse(str, out var value) {} — value видно только внутри скобок
Тогда такой код:
    if (!int.TryParse(str, out var value)) return false;
    // тут юзаем value


будет в пролете. Если так, то уж совсем криво этот синтаксис выглядит.