Комментарии 30
Вы правы, в полной мере такой режим работы раскрывает человеческий потенциал, когда у тебя через два дня релиз, а в проекте — мертвый конь.

PS/ В чем собственно суть самой игры?
Да нет, наверно позор мне. Не подумал, что кто-то может не знать про игру «Жизнь». Подправил статью.
Ну вы ведь понимаете, что под циклами и условными операторами подразумевались любые конструкции типа for, foreach, while, if, switch, ?, ??, goto(решать можно не только на C#) и тд.

А про четвертое условие вы могли бы подробнее рассказать? Почему вам кажется, что мы его нарушаем?
Вы нарушаете 4 условие, потому что оно в общем не корректно:
1. Не определено понятие «строчки». Что это — оператор или физическая / логическая строка кода? Если строчка, то всё зависит от форматирования — можно так весь клас написать в одну строчку.

2. Не определено понятие «длина метода». Что это — тело метода или весь метод целиком?
Не стоит забывать про здравый смысл. Понятно, что вытягивать класс в одну строчку нельзя. Об этом, кстати сказать, даже никто и не заикнулся, ведь это логично.

Длина метода — это тело метода. Опять же, об этом снова никто не говорил, так как если считать сигнатуру метода, открывающую и закрывающую скобку, то это уже 3 строчки. Так что глупо считать по-другому.
Code retreat был на следующий день после лекции про функциональную парадигму, так что ограничение на количество строк/метод, насколько я понял, намекало на то, что метод должен быть вида «return something.Select(...)» — получить, обработать и отдать, чтобы не было side-эффектов, только операции над данными. Понятное дело, что цепочка LINQ-вызовов Select().Where().Distinct() это нормальная одна строчка.
«Понятное дело, что цепочка LINQ-вызовов Select().Where().Distinct() это нормальная одна строчка.»

Я не согласен. Так уменьшается читаемость. К тому же, если записать это в виде именно LINQ, то получится минимум 3 строчки:

return (select x from xxx
where something(x)
select x).Distinct();
1. Читаемость уменьшается лишь для тех, кто не привык такое читать. Для меня вот читаемость улучшается.
2. Что такое «именно LINQ»? :) спец-синтаксис — это часть LINQ, которую можно использовать, а можно и не использовать. Тем более никто не заставляет «именно LINQ» вытягивать в одну строчку.
3. Короче, надо прекращать занудствовать. Code Retreat — это про «весело», а не про формальные придирки и занудство ;)
Отсутствие циклов должно было привести к push-/event-модели игры. Т.е. каждая клетка должна сообщать своим соседям, что она изменила состояние и они должны реагировать на это соответственно.

Отсутствие условных операторов должно было привести к классовому полиморфизму.
Переменная от слова «менять». А это значение, которое нигде, никогда не меняется.
Это переменная. variable.

1. Значение этой переменной при каждом вызове метода будет разным (0-8)
2. Значение этой переменной при каждом вызове метода будет меняться с 0 на то, что вернет метод Count.
3. То, что «никогда не меняется» называется «константа». Это не константа.
Ок, замените в коде имя это переменной на ее значение и вам станет лучше =)
Надеюсь она исчезнет вместе с вашими попытками найти любые, даже мельчайшие недостатки в коде. Это вполне допустимо как по мнению организаторов и руководителей, так и по моему мнению.

P.s Ни капли не хочу вас оскорбить или обидеть, давайте оставаться благоразумными.
Переменная, которая не изменяется = значение. В C# нет let, val или каких-то других подобных вещей, но это не значит, что от того, что компилятор не ограничил возможность изменения чего-то, это внезапно стало меняться.

«При каждом вызове метода» будет создана новая переменная (или семантика будет такой же, как при создании новой переменной, для особо придирчивых).

«Значение переменной» не будет определено до того момента, пока не вернётся результат выполнения последнего метода. Опять же, по семантике. Можно почитать про то, как оператор let определяется в простом нетипизированном лямбда-исчислении, или построить AST.

То, что никогда не меняется — это то, что никогда не меняется. «Переменные» в математике тоже никогда не меняются. Стоит различать смысл и форму, не?

Наконец, стоит помнить, что типы, синтаксис и прочее — это синтаксическая категория, и только. Важна семантика.
1. «Переменная, которая не изменяется = значение.». Вы путаете с константами.

2. В C# есть «let». Учите матчасть.
Наш последний корпоративный сеанс code retreat показал, что написать без циклов намного проще, чем без циклов и без рекурсии.
Тут все очень сильно зависит от языка. В Java — да, сложно. В C# я думаю реализация может даже не измениться.
если говорить о реализации, приведенной в статье, то ее вполне можно повторить на java. хотя, возможно, я не заметил какой-то особенный синтаксический сахар :)
Мне вот, кстати, не очень понятно, как можно участвовать в CodeRetreat повторно с той же задачей. Когда ты уже знаешь про нее все, пробовать становится больше нечего. Хотя я это чисто теоретически предполагаю — повторно участвовать пока не пробовал :)
Можно выбирать новые условия из тех, что давались на выбор (например — ранее выбрал вариант «без циклов», второй вариант — «без условий»).
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Информация

Дата основания
Местоположение
Россия
Сайт
tech.kontur.ru
Численность
5 001–10 000 человек
Дата регистрации

Блог на Хабре