Почему в качестве statement может быть только assigment, call, increment etc?
От: Аноним  
Дата: 22.01.14 04:03
Оценка:
Почему нельзя писать?
a + b;

Как это могло бы пригодиться: например, чтобы заменить громоздкий условный if-else на компактный тернарный ?: при определении какой метод вызвать:
int a = 5;
int b = 10;
a == b ? doThis() : doThat()

P.S.: Как перевести statement на русский? (MSDN предлагает "оператор" )
P.P.S.: Как переключить язык статьи на MSDN на русский, кроме как заменить в URL "en-us" на "ru-ru"?
Re: Почему в качестве statement может быть только assigment, call, increment etc
От: Sinix  
Дата: 22.01.14 05:24
Оценка: 3 (1)
Здравствуйте, Аноним, Вы писали:

А>Почему нельзя писать?

А>
a + b;

А>Как это могло бы пригодиться: например, чтобы заменить громоздкий условный if-else на компактный тернарный ?: при определении какой метод вызвать:

Липперт:

Я философски против предоставления такого метода по двум причинам.

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

Цель выражения (expression) – вычислить значение, а не произвести побочный эффект. Цель оператора (statement) – вызвать побочный эффект. Место вызова этой штуки будет выглядеть весьма похоже на выражение (хотя, признаться, поскольку метод ничего не возвращает, выражение может использоваться только в контексте «операторного выражения» (statement expression)).

Мне как-то не нравится идея сделать единственный оператор для последовательностей, который полезен только для спецэффектов.


Очень советую прочитать (не пролистать, а именно прочитать) всю статью целиком.


А>P.S.: Как перевести statement на русский?

См перевод по ссылке выше. Обычно для неоднозначных терминов приводят и русский и английский вариант.

А>P.P.S.: Как переключить язык статьи на MSDN на русский, кроме как заменить в URL "en-us" на "ru-ru"?

Где-то внизу есть ссылка настроек, но быстрее поменять в адресной строке. Stackoverflow тоже не предлагает ничего полезного.
Re: Почему в качестве statement может быть только assigment, call, increment etc
От: hardcase Пират http://nemerle.org
Дата: 22.01.14 07:08
Оценка: +1 -1
Здравствуйте, Аноним, Вы писали:

А>Как это могло бы пригодиться: например, чтобы заменить громоздкий условный if-else на компактный тернарный ?: при определении какой метод вызвать:


Тогда уж лучше наоборот — выкинуть плохо читаемый тернарный оператор и оставить только if-else.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: Почему в качестве statement может быть только assigment, call, increment
От: Аноним  
Дата: 22.01.14 08:54
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Здравствуйте, Аноним, Вы писали:


H>Тогда уж лучше наоборот — выкинуть плохо читаемый тернарный оператор и оставить только if-else.


Ну, т.е. в C++ это было можно, от этого были проблемы, поэтому в C# этого нельзя. Я вас правильно прочитал?
Частный случай мало интересен (кстати, вы правы насчет него), вопрос был поставлен в общем.
Re[3]: Почему в качестве statement может быть только assigment, call, increment
От: Аноним  
Дата: 22.01.14 09:03
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Ну, т.е. в C++ это было можно, от этого были проблемы, поэтому в C# этого нельзя. Я вас правильно прочитал?

А>Частный случай мало интересен (кстати, вы правы насчет него), вопрос был поставлен в общем.
Для ясности. Частный случай это замена if-else на ?:, общий случай это невозможность писать код типа
2 + 3;
Re[4]: Почему в качестве statement может быть только assigment, call, increment
От: Doc Россия http://andrey.moveax.ru
Дата: 22.01.14 09:27
Оценка:
Здравствуйте, Аноним, Вы писали:

А>>Частный случай мало интересен (кстати, вы правы насчет него), вопрос был поставлен в общем.

А>Для ясности. Частный случай это замена if-else на ?:, общий случай это невозможность писать код типа
А>
А>2 + 3;
А>


И что это в общем случае даст? Тут все верно было процитировано

Очевидно, что единственная цель вызова этого метода состоит в достижении побочных эффектов.


Если + и может играть тут какую-то роль, то явно только производя побочный эффект.
Re[2]: Почему в качестве statement может быть только assigment, call, increment
От: Аноним  
Дата: 22.01.14 09:38
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Очень советую прочитать (не пролистать, а именно прочитать) всю статью целиком.

Но статья целиком о том, что foreach лучше .ForEach (тут он прав, конечно же. Хотя с другой стороны в комментариях можно найти и обоснованные возражения и его ответ в одном из них, что он упустил, что .ForEach может быть полезен когда ему на вход подается method group — комм. Steve Cooper).

С другой стороны выделенный вами фрагмент выглядит правдоподобно, но непонятно. Например, непонятно что такое "statement expression", гугл такого не находит. А если это идиома, то непонятно что она в данном контексте значит.
> Место вызова этой штуки будет выглядеть весьма похоже на выражение (хотя, признаться, поскольку метод ничего не возвращает, выражение может использоваться только в контексте «операторного выражения» (statement expression)).

Также непонятно следующее. Допустим, цель вызвать побочные эффекты. Что это такое и чем это плохо?
S>Во-первых, это нарушило бы принципы функционального программирования, на которых основаны все остальные операторы на последовательностях. Очевидно, что единственная цель вызова этого метода состоит в достижении побочных эффектов.

S>См перевод по ссылке выше. Обычно для неоднозначных терминов приводят и русский и английский вариант.

Спасибо. Действительно.

S>Где-то внизу есть ссылка настроек, но быстрее поменять в адресной строке. Stackoverflow тоже не предлагает ничего полезного.

Спасибо :3
Re[5]: Почему в качестве statement может быть только assigment, call, increment
От: Аноним  
Дата: 22.01.14 09:44
Оценка:
Здравствуйте, Doc, Вы писали:

Doc>И что это в общем случае даст? Тут все верно было процитировано

Doc>

Очевидно, что единственная цель вызова этого метода состоит в достижении побочных эффектов.

Doc>Если + и может играть тут какую-то роль, то явно только производя побочный эффект.
Но то, что мы напишем так как требует компилятор не гарантирует его отсутствие:
var a = 2 + 3;
Re[3]: Почему в качестве statement может быть только assigment, call, increment
От: Sinix  
Дата: 22.01.14 10:16
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Но статья целиком о том, что foreach лучше .ForEach

Неа. У Липперта просто стиль такой — разбирать всё на конкретных примерах. Те же доводы применимы к любым спорам на тему "statement === expression".

А> (тут он прав, конечно же. Хотя с другой стороны в комментариях можно найти и обоснованные возражения и его ответ в одном из них, что он упустил, что .ForEach может быть полезен когда ему на вход подается method group — комм. Steve Cooper).

Это всё-таки частные случаи, для них никто не мешает добавить свой хелпер.

А>С другой стороны выделенный вами фрагмент выглядит правдоподобно, но непонятно. Например, непонятно что такое "statement expression", гугл такого не находит. А если это идиома, то непонятно что она в данном контексте значит.

Это из спецификации шарпа. Например вот


>> Место вызова этой штуки будет выглядеть весьма похоже на выражение (хотя, признаться, поскольку метод ничего не возвращает, выражение может использоваться только в контексте «операторного выражения» (statement expression)).

А>Также непонятно следующее. Допустим, цель вызвать побочные эффекты. Что это такое и чем это плохо?
1. Термин. Происхождение из медицины, см http://en.wikipedia.org/wiki/Side_effect
2. Тем, что вместо уже готового средства (стейтментов) мы используем выражения, причём крайне неочевидным способом. Не, серьёзно, кто будет писать
var a = new FailProvider();
a+b; // erases all data

// вместо
a.EraseAllData();

?
Re: Почему в качестве statement может быть только assigment, call, increment etc
От: hardcase Пират http://nemerle.org
Дата: 22.01.14 11:50
Оценка: 3 (1)
Здравствуйте, Аноним, Вы писали:

А>Почему нельзя писать?

А>
a + b;


Потому что так видят авторы C# и только, других причин нет.
В языках, где есть лишь expression-ы, компиляторы на подобный код рассказывают предупреждение о том, что результат операции игнорируется.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[6]: Почему в качестве statement может быть только assigment, call, increment
От: Doc Россия http://andrey.moveax.ru
Дата: 22.01.14 12:03
Оценка: :)
Здравствуйте, Аноним, Вы писали:

А>Но то, что мы напишем так как требует компилятор не гарантирует его отсутствие:

А>
А>var a = 2 + 3;
А>


А про гарантии никто не говорил. Там ключевое слово "единственная".
В данном случае мы еще получаем некую сумму, что скорее всего является целью данного кода.

Т.е. просто 2 + 3 скорее всего можно развернуть как
var r1 = 2;
var r2 = 3;
SomeSomeOp(r1,r2);


или вообще
[c#]DoSomeOp(2,3);[c#]

что IMHO более читабельно, чем просто 2+3, т.к. скорее всего DoSomeOp будет описывать суть процесса.
Re: Почему в качестве statement может быть только assigment, call, increment etc
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.01.14 18:55
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Почему нельзя писать?

А>
a + b;


Авторы пытались защитить программистов использующих шарп от ошибок. Так компилятор выявляет неверное использование.

А>Как это могло бы пригодиться: например, чтобы заменить громоздкий условный if-else на компактный тернарный ?: при определении какой метод вызвать:

А>
А>int a = 5;
А>int b = 10;
А>a == b ? doThis() : doThat()
А>


Ты интитивным путем пришел к идее все есть выражение (everything is an expression), но наоборот.

Эта идея широко распростронена в функциональном мире. Она подразумевает полный отказ от стейтментов. Вместо них любое выражение может иметь тип void (в терминах шарпа).

Например, в Nemerle оператор if может использоваться и как стейтмент:
if (a == b)
  DoThis();
else
  DoThat();

и как выражение:
def x = if (a == b) GetThis() else GetThat();


В Nemerle не нужно (хотя и можно) использовать return. Функция возвращает значения вычесленные самими вложенными ветвями выражений. Например:
public static @==(name1 : Identifier, name2 : Identifier) : bool
{
  if (name1 : object == name2)
    true
  else if (null == name1 || null == name2)
    false
  else
    name1.Equals(name2)
}

Это делает код более понятным и облегчает его чтение (все выходы из кода очевидны и предсказуемы).

Значением блока кода является его последний элемент, так что возможен вот такой прием:
Foo({ mutable value; dic.TryGetValue(key, out value); value });


А>P.S.: Как перевести statement на русский? (MSDN предлагает "оператор" )


Никак. Принятого перевода нет и большинство авторов превращают текст в кашу переводя statement как оператор, попутно так же переводя operator.

А>P.P.S.: Как переключить язык статьи на MSDN на русский, кроме как заменить в URL "en-us" на "ru-ru"?


Там сверху переключатель есть, вроде.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Почему в качестве statement может быть только assigment, call, increment
От: Аноним  
Дата: 23.01.14 03:37
Оценка:
Спасибо за развернутые ответы.
Re[7]: Почему в качестве statement может быть только assigment, call, increment
От: Аноним  
Дата: 23.01.14 03:47
Оценка:
Здравствуйте, Doc, Вы писали:

Doc>А про гарантии никто не говорил. Там ключевое слово "единственная".

Doc>В данном случае мы еще получаем некую сумму, что скорее всего является целью данного кода.
Вы правы. Спасибо.
Re[2]: Почему в качестве statement может быть только assigment, call, increment
От: Doc Россия http://andrey.moveax.ru
Дата: 23.01.14 03:58
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>
VD>public static @==(name1 : Identifier, name2 : Identifier) : bool
VD>{
VD>  if (name1 : object == name2)
VD>    true
VD>  else if (null == name1 || null == name2)
VD>    false
VD>  else
VD>    name1.Equals(name2)
VD>}
VD>

VD>Это делает код более понятным и облегчает его чтение (все выходы из кода очевидны и предсказуемы).

На nemerle не писал, поэтому как-то не заметил что данный код легко читаемый.
Не зная тонкостей языка сложно понять что он делает (и что есть 3 точки выхода).

А вот конструкция вида

if (a != b)
   return M1(a, b);
else
   return M2(a, b);


IMHO будет понятна большей части разрабочиков, писавших на C#, C/C++, JS, PHP, VB.
Re[2]: Почему в качестве statement может быть только assigment, call, increment
От: Аноним  
Дата: 23.01.14 03:59
Оценка:
Спасибо.
Re[3]: Почему в качестве statement может быть только assigment, call, increment
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.01.14 10:33
Оценка:
Здравствуйте, Doc, Вы писали:

Doc>На nemerle не писал, поэтому как-то не заметил что данный код легко читаемый.


Это пока кода 5 строк. А когда его экраны, то отсутствие ретурнов в середине алгоритма очень облегчает его читаемость.

В прочем, конечно же "все есть выражение" только составная часть. Для повышения уровня языка этого явно недостаточно. В Немерле их до фига. Например, локальные функции или оператор "?." позволяющий избавиться от моря проверок на null.

Кое какие мелочи (например, упоминаемый оператор "?."), вроде как, планируются в следующей версии Шарпа. Но того же паттер-матчинга в ближайшее время не появится. А это мощнейшая вещь.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Почему в качестве statement может быть только assigment, call, increment etc
От: pugv Россия  
Дата: 23.01.14 12:40
Оценка:
Здравствуйте, Аноним, Вы писали:

А>P.S.: Как перевести statement на русский? (MSDN предлагает "оператор" )


Я бы перевел как "предложение", т.к. "оператор" — это operator. Насколько это общепринято,
Re[4]: Почему в качестве statement может быть только assigment, call, increment
От: Doc Россия http://andrey.moveax.ru
Дата: 23.01.14 12:50
Оценка:
Здравствуйте, VladD2, Вы писали:

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


Doc>>На nemerle не писал, поэтому как-то не заметил что данный код легко читаемый.


VD>Это пока кода 5 строк. А когда его экраны, то отсутствие ретурнов в середине алгоритма очень облегчает его читаемость.


Так вот и я о таком же случае. Как в коде скажем 20-30 строк сразу узреть такую точку выхода. return так видно + IDE подсвечивает. А в nemerle как?
Re[5]: Почему в качестве statement может быть только assigment, call, increment
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.01.14 13:50
Оценка: +2
Здравствуйте, Doc, Вы писали:

Doc>Так вот и я о таком же случае. Как в коде скажем 20-30 строк сразу узреть такую точку выхода. return так видно + IDE подсвечивает. А в nemerle как?


IDE одинаково подсвечивает все ключевые слова. Выцепить глазами одиночный return из кучи кода практически невозможно. И код не весь в экран влезает. Я уже не говорю о фолдинге разном. Смотришь ты в конец некой функции и думаешь, а дойдет ли сюда управление?

А вот если ты знаешь, что return-ов нет в принципе, то ситуация в корне меняется. Ты уже знаешь, что выполнение не прервется где-то выше. И код начинает выглядеть по другому. В коде появляются четкие потоки управления. Ты точно знаешь, что если глядишь в конец функции, то раньше управление прерваться не могло. Все ветвления идут по if-ам и match-ам (аналогам switch-ей, но в сто раз более крутым). if без else вообще отдельная конструкция, которая принципиально императивна и прервать выполнение не может.

На мой взгляд return оправдан только в начале функции, как средство проверки граничных условий. Ну, или в очень маленькой функции (5-7 строк). В теле функции он вреден.

Теперь я и на Шарпе пишу по другому. Хотя шарп, конечно, провоцирует на использование return, continue и прочих императивных конструкций.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Почему в качестве statement может быть только assigment, call, increment
От: IT Россия linq2db.com
Дата: 23.01.14 14:41
Оценка:
Здравствуйте, Doc, Вы писали:

Doc>На nemerle не писал, поэтому как-то не заметил что данный код легко читаемый.


Это быстро проходит.

Doc>А вот конструкция вида

...
Doc>IMHO будет понятна большей части разрабочиков, писавших на C#, C/C++, JS, PHP, VB.

Синтаксис лямбд в C# уже не требует return и как-то все до сих пор живы и счастливы. Так что return действительно лишний элемент в языке.
Если нам не помогут, то мы тоже никого не пощадим.
Re[6]: Почему в качестве statement может быть только assigment, call, increment
От: DarkEld3r  
Дата: 23.01.14 15:35
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>А вот если ты знаешь, что return-ов нет в принципе, то ситуация в корне меняется.

Хочу уточнить один момент — ты выше пишешь, что в Немерле ретурн использовать можно. То есть гарантий (что его не будет) всё-таки нет? Или он там ведёт себя как-то иначе?
Re[6]: Почему в качестве statement может быть только assigment, call, increment
От: Doc Россия http://andrey.moveax.ru
Дата: 23.01.14 16:29
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>А вот если ты знаешь, что return-ов нет в принципе, то ситуация в корне меняется. Ты уже знаешь, что выполнение не прервется где-то выше.


Т.е. в исходном примере точки true, false и name1.Equals(name2) не являются прерывающими?

VD>И код начинает выглядеть по другому. В коде появляются четкие потоки управления.


Ну тогда это вполне реализуемо и на C#

bool retVal;

if (name1 == name2)
  retVal = true;
else if (null == name1 || null == name2)
  retVal = false
else
  retVal = name1.Equals(name2)

return retVal;


Хотя кончено, как говориться, на вкус и цвет товарищей нет.
Re[4]: Почему в качестве statement может быть только assigment, call, increment
От: Doc Россия http://andrey.moveax.ru
Дата: 23.01.14 16:32
Оценка:
Здравствуйте, IT, Вы писали:

Doc>>На nemerle не писал, поэтому как-то не заметил что данный код легко читаемый.

IT>Это быстро проходит.

Ну с привычной и asm читать легко

IT>Синтаксис лямбд в C# уже не требует return и как-то все до сих пор живы и счастливы. Так что return действительно лишний элемент в языке.


Что-то не встречал лямбд в экране высотой.
Re[5]: Почему в качестве statement может быть только assigment, call, increment
От: IT Россия linq2db.com
Дата: 23.01.14 17:27
Оценка:
Здравствуйте, Doc, Вы писали:

Doc>>>На nemerle не писал, поэтому как-то не заметил что данный код легко читаемый.

IT>>Это быстро проходит.
Doc>Ну с привычной и asm читать легко

Это так. С другой стороны некоторые, чтобы доказать всем правильность своих суждений, любят отрицать очевидные вещи, в которых сами ничего не понимают.

IT>>Синтаксис лямбд в C# уже не требует return и как-то все до сих пор живы и счастливы. Так что return действительно лишний элемент в языке.

Doc>Что-то не встречал лямбд в экране высотой.

У тебя есть прибор для измерения правильности лямбд? Дай попользоваться.
Если нам не помогут, то мы тоже никого не пощадим.
Re[7]: Почему в качестве statement может быть только assigment, call, increment
От: IT Россия linq2db.com
Дата: 23.01.14 17:38
Оценка:
Здравствуйте, DarkEld3r, Вы писали:

VD>>А вот если ты знаешь, что return-ов нет в принципе, то ситуация в корне меняется.

DE>Хочу уточнить один момент — ты выше пишешь, что в Немерле ретурн использовать можно. То есть гарантий (что его не будет) всё-таки нет? Или он там ведёт себя как-то иначе?

return в Немерле представляет собой подключаемый макрос и для его использования нужно сделать определённые телодвижения. Отличие одно — им можно сделать выход из глубин вложенности, что само по себе уже является функциональной ересью.
Если нам не помогут, то мы тоже никого не пощадим.
Re[7]: Почему в качестве statement может быть только assigment, call, increment
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.01.14 17:39
Оценка: 1 (1)
Здравствуйте, DarkEld3r, Вы писали:

DE>Хочу уточнить один момент — ты выше пишешь, что в Немерле ретурн использовать можно. То есть гарантий (что его не будет) всё-таки нет? Или он там ведёт себя как-то иначе?


Дело в том, что return, continue, break реализованы в виде макросов. Для использования return, continue, break нужно открыть (using-ом) пространство имен Nemerle.Imperative.

В коде может быть именованный блок:
public FirstFailedIndex : int
{
  get
  {
    ret:
    {
      def state = _parseResult.ast[AstPointer + 2];
      when (state != ParseResult.AstParsedState)
      {
        foreach (rule in Sequence.Subrules with i)
          when (rule.State > state)
            ret(i - 1);

        ret(Sequence.Subrules.Length - 1);
      }
      -1
    }
  }
}


На практике, они встречаются очень редко.

Кроме того в команде вырабатывается соглашение (у нас оно негласно выработалось) не применять return, continue, break или именованные блоки внутри больших функций и вообще, без особой необходимости. Так что на практике можно быть уверенным, что код их не содержит.

Хотя есть код где не только return, но и goto есть. Мне даже пришлось реализовать макрос goto для этого, так как раньше в языке goto не поддерживалось. Wolfhound считает, что с ними писать алгоритмы парсинга проще. В основном это генерируемый код. Но 7 goto в гражданском коде есть .

В общем, ничего не должно становиться догмой. 99% нашего кода не имеет даже return-ов, но это не означает, что мы совсем против него. Просто это дает реальные преимущества на практике.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Почему в качестве statement может быть только assigment, call, increment
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.01.14 18:00
Оценка:
Здравствуйте, Doc, Вы писали:

Doc>Т.е. в исходном примере точки true, false и name1.Equals(name2) не являются прерывающими?


Нет. Это естественные окончания ветвей исполнения. Если после них написать что-то вроде:
public static @==(name1 : Identifier, name2 : Identifier) : bool
{
  if (name1 : object == name2)
    true
  else if (null == name1 || null == name2)
    false
  else
    name1.Equals(name2);

  true
}

то функция всегда будет возвращать true, а компилятор выдаст предупреждение о том, что значение выражения "if..." теряется.
Первое время это не привычно, но потом не понимаешь как жил без этого раньше.

Doc>Ну тогда это вполне реализуемо и на C#

Doc>
Doc>bool retVal;

Doc>if (name1 == name2)
Doc>  retVal = true;
Doc>else if (null == name1 || null == name2)
Doc>  retVal = false
Doc>else
Doc>  retVal = name1.Equals(name2)

Doc>return retVal;
Doc>


Для частного случая — да. В общем, это очень неудобно/невозможно и никто так писать не будет. А для приведенного случая и return-ы сойдут. Тут ведь весь код на ладони.

Doc>Хотя кончено, как говориться, на вкус и цвет товарищей нет.


Все знакомые кто пробовал так писать дольше месяца сходятся во мнении, что "return не нужен". Как правильно сказал IT в лямбдах шарпа тоже обходятся без return-ов и не видят в этом проблемы. Это просто шаг к улучшению поддержки функционального стиля программирования.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Почему в качестве statement может быть только assigment, call, increment
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.01.14 18:07
Оценка:
Здравствуйте, IT, Вы писали:

IT>Это так. С другой стороны некоторые, чтобы доказать всем правильность своих суждений, любят отрицать очевидные вещи, в которых сами ничего не понимают.


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

Обычно понимание приходит когда возвращаться обратно. Никак не забуду тот батхерт/ломку когда после месячного программирования на Немерле вызвал обратный переход на Шарп. Казалось что мне выкрутили руки. Потом привык и стал относиться даже как-то по философски. Но первая реакция была просто потрясающей.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Почему в качестве statement может быть только assigment, call, increment
От: Doc Россия http://andrey.moveax.ru
Дата: 24.01.14 03:25
Оценка:
Здравствуйте, IT, Вы писали:

IT>Это так. С другой стороны некоторые, чтобы доказать всем правильность своих суждений, любят отрицать очевидные вещи, в которых сами ничего не понимают.


Эк куда тебя понясло. Куча воды и не слова по сути.

Doc>>Что-то не встречал лямбд в экране высотой.

IT>У тебя есть прибор для измерения правильности лямбд? Дай попользоваться.

Как "измерение правильности лямбд" относится к объему кода?
Re[8]: Почему в качестве statement может быть только assigment, call, increment
От: Doc Россия http://andrey.moveax.ru
Дата: 24.01.14 03:30
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Первое время это не привычно, но потом не понимаешь как жил без этого раньше.


Со стороны больше похоже на "сахар". Если подставить return, то, за рядом моментов, получится C# код.

VD>Тут ведь весь код на ладони.


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

VD>Все знакомые кто пробовал так писать дольше месяца сходятся во мнении, что "return не нужен". Как правильно сказал IT в лямбдах шарпа тоже обходятся без return-ов и не видят в этом проблемы.


Только стоит еще отметить, что там обычно несколько строк кода, а то и вовсе что-то вроде a+b.

VD>Это просто шаг к улучшению поддержки функционального стиля программирования.


Заинтересовали, если вдруг найду время — попробую
Re[7]: Почему в качестве statement может быть только assigment, call, increment
От: IT Россия linq2db.com
Дата: 24.01.14 04:28
Оценка:
Здравствуйте, Doc, Вы писали:

IT>>Это так. С другой стороны некоторые, чтобы доказать всем правильность своих суждений, любят отрицать очевидные вещи, в которых сами ничего не понимают.

Doc>Эк куда тебя понясло. Куча воды и не слова по сути.

Началось.

Doc>>>Что-то не встречал лямбд в экране высотой.

IT>>У тебя есть прибор для измерения правильности лямбд? Дай попользоваться.
Doc>Как "измерение правильности лямбд" относится к объему кода?

Какое отношение имеет экран к лямбдам?
Если нам не помогут, то мы тоже никого не пощадим.
Re[8]: Почему в качестве statement может быть только assigment, call, increment
От: Doc Россия http://andrey.moveax.ru
Дата: 24.01.14 04:52
Оценка:
Здравствуйте, IT, Вы писали:

Doc>>Как "измерение правильности лямбд" относится к объему кода?

IT>Какое отношение имеет экран к лямбдам?

Просто — объем кода. Переспрошу — у тебя часто получаются / встречаются лямбды занимающие весь экран (где-то 50 строк кода).
Re[8]: Почему в качестве statement может быть только assigment, call, increment
От: Doc Россия http://andrey.moveax.ru
Дата: 24.01.14 04:57
Оценка:
Здравствуйте, VladD2:

Кстати, под VS2013 планы есть? Что-то не хочется 12 ставить ради попробовать.

+ на nemerle.org страница Wiki дает 404
Re[9]: Почему в качестве statement может быть только assigment, call, increment
От: IT Россия linq2db.com
Дата: 24.01.14 05:15
Оценка: :)
Здравствуйте, Doc, Вы писали:

Doc>Просто — объем кода. Переспрошу — у тебя часто получаются / встречаются лямбды занимающие весь экран (где-то 50 строк кода).


А почему не 49 или 51?
Если нам не помогут, то мы тоже никого не пощадим.
Re[10]: Почему в качестве statement может быть только assigment, call, increment
От: Doc Россия http://andrey.moveax.ru
Дата: 24.01.14 07:42
Оценка:
Здравствуйте, IT, Вы писали:

Doc>>где-то 50 строк кода

IT>А почему не 49 или 51?

49 и 51 это "где-то 50"

Почему "где-то 50" — примерно столько входит по высоте на экран. Т.е. примерно столько можно окинуть взглядом за раз, без скрола.

Но ты опять в сторону — сколько строк в среднем занимают у тебя (написанным тобой коде, не тобой но с которым ты работаешь) лямбды, а сколько функции?
Re[9]: Почему в качестве statement может быть только assigment, call, increment
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.01.14 09:08
Оценка:
Здравствуйте, Doc, Вы писали:

Doc>Кстати, под VS2013 планы есть? Что-то не хочется 12 ставить ради попробовать.


Для 2013 сборка есть, но он пока не автоматизирована. Вручную можно из исходников собрать.
Качаешь репозиторий (он большой) и запускаешь BuildInstallerFast-4.5.1.cmd (чтобы собрать инсталлятор) или DevBuildQuick-4.5.1.cmd (чтобы собрать и зарегистрировать отладочную весрию).

Doc>+ на nemerle.org страница Wiki дает 404


У меня все ОК. Видимо работы какие-то велись.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Почему в качестве statement может быть только assigment, call, increment
От: Doc Россия http://andrey.moveax.ru
Дата: 24.01.14 09:28
Оценка:
Здравствуйте, VladD2, Вы писали:

Doc>>+ на nemerle.org страница Wiki дает 404

VD>У меня все ОК. Видимо работы какие-то велись.

По прежнему 404.
Попробовал refresh + принудительно с сервера и потом с другого девайса — стабильно 404.
Re[11]: Почему в качестве statement может быть только assigment, call, increment
От: hardcase Пират http://nemerle.org
Дата: 24.01.14 09:33
Оценка:
Здравствуйте, Doc, Вы писали:

Doc>По прежнему 404.

Doc>Попробовал refresh + принудительно с сервера и потом с другого девайса — стабильно 404.

В связи с переездом, на сервере скорее все сайт не подняли (либо накосячили с обратным прокси), я вечером посмотрю, в чем дело.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[11]: Почему в качестве statement может быть только assigment, call, increment
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.01.14 10:25
Оценка:
Здравствуйте, Doc, Вы писали:

Doc>По прежнему 404.

Doc>Попробовал refresh + принудительно с сервера и потом с другого девайса — стабильно 404.

Что-то не так с DNS. Мы тут переезжали недавно. Наверно какие-то проблемы. От меня видно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Почему в качестве statement может быть только assigment, call, increment
От: hardcase Пират http://nemerle.org
Дата: 24.01.14 10:59
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Что-то не так с DNS. Мы тут переезжали недавно. Наверно какие-то проблемы. От меня видно.


А ты вику открой
/* иЗвиНите зА неРовнЫй поЧерК */
Re[11]: Почему в качестве statement может быть только assigment, call, increment
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.01.14 11:06
Оценка:
Здравствуйте, Doc, Вы писали:

Doc>По прежнему 404.

Doc>Попробовал refresh + принудительно с сервера и потом с другого девайса — стабильно 404.

Если ты про wiki, то ее еще не подняли.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Почему в качестве statement может быть только assigment, call, increment
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.01.14 11:06
Оценка: 4 (1)
Здравствуйте, Doc, Вы писали:

Основное содержимое вики есть здесь:
https://github.com/rsdn/nemerle/wiki
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Почему в качестве statement может быть только assigment, call, increment
От: IT Россия linq2db.com
Дата: 24.01.14 14:26
Оценка:
Здравствуйте, Doc, Вы писали:

Doc>Но ты опять в сторону — сколько строк в среднем занимают у тебя (написанным тобой коде, не тобой но с которым ты работаешь) лямбды, а сколько функции?


Я не считал. А тебе зачем? Ты можешь сразу озвучить свою мысль без этих вихляний? Если она у тебя, конечно, есть.
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: Почему в качестве statement может быть только assigment, call, increment
От: AlexRK  
Дата: 24.01.14 14:35
Оценка: +1
Здравствуйте, Sinix, Вы писали:

S>Очень советую прочитать (не пролистать, а именно прочитать) всю статью целиком.


Однако Липперт почему-то допустил существование ++ и --.
Re[12]: Почему в качестве statement может быть только assigment, call, increment
От: Doc Россия http://andrey.moveax.ru
Дата: 27.01.14 04:14
Оценка:
Здравствуйте, IT, Вы писали:

IT>Я не считал. А тебе зачем? Ты можешь сразу озвучить свою мысль без этих вихляний? Если она у тебя, конечно, есть.


Забыл что тебе все разжевывать надо Речь о том, что лямбда это как правило небольшая. А в этом случае даже "и return-ы сойдут".
Более того, лямбды без return как правило имеют вид x => DoSomething(x), т.е. не содержат if и прочих конструкций как в исходном примере.
Re[3]: Почему в качестве statement может быть только assigment, call, increment
От: Sinix  
Дата: 27.01.14 05:35
Оценка:
Здравствуйте, AlexRK, Вы писали:

ARK>Однако Липперт почему-то допустил существование ++ и --.

Угу, c++++ без ++ — это как-то странно получалось
Re[13]: Почему в качестве statement может быть только assigment, call, increment
От: IT Россия linq2db.com
Дата: 27.01.14 05:56
Оценка:
Здравствуйте, Doc, Вы писали:

IT>>Я не считал. А тебе зачем? Ты можешь сразу озвучить свою мысль без этих вихляний? Если она у тебя, конечно, есть.


Doc>Забыл что тебе все разжевывать надо Речь о том, что лямбда это как правило небольшая. А в этом случае даже "и return-ы сойдут".

Doc>Более того, лямбды без return как правило имеют вид x => DoSomething(x), т.е. не содержат if и прочих конструкций как в исходном примере.

Ну и где тут мысль?
Если нам не помогут, то мы тоже никого не пощадим.
Re[14]: Почему в качестве statement может быть только assigment, call, increment
От: Doc Россия http://andrey.moveax.ru
Дата: 27.01.14 06:18
Оценка:
Здравствуйте, IT, Вы писали:

Doc>>Более того, лямбды без return как правило имеют вид x => DoSomething(x), т.е. не содержат if и прочих конструкций как в исходном примере.

IT>Ну и где тут мысль?

Что ты совсем не в тему с однострочными лямбдами без return, когда речь шла о методах с блоками if.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.