Плюсы и минусы неявной типизации

Одной из наиболее сомнительных возможностей, когда либо добавленных в язык, является объявление неявно типизированных локальных переменных, a.k.a «var». Даже сегодня, несколько лет спустя, я все еще нахожу статьи, в которых рассматриваются плюсы и минусы этой возможности. Меня часто поделиться своим мнением об этом, ну что ж, вот оно. Прежде всего, давайте определимся с назначением кода….

0

Опасность, Уил Робинсон!

Постоянные читатели этого блога знают, что мне часто задают следующий вопрос о том, почему определенный кусок плохого кода не приводит к предупреждению компилятора. На вопрос «Почему нет?» всегда значительно сложнее дать ответ, поскольку он выворачивает наизнанку причинно-следственную связь в нашей голове; обычно мы спрашиваем, что является причиной того, чтобы что-то произошло, а не что является…

0

Все ваши базы не принадлежат вам[1]

Меня иногда спрашивают, почему в языке C# мы не можем сделать так: class GrandBase { public virtual void M() { Console.WriteLine("GB"); } } class Base : GrandBase { public override void M() { Console.WriteLine("B"); } } class Derived : Base { public override void M() { Console.WriteLine("D"); base.base.M(); // Не корректно! } } Автор последнего…

0

Раскраска графов с помощью простого поиска с возвратом. Часть 1

Постоянные читатели моего блога знают о том, что я интересуюсь изучением того, как изменить свой стиль программирования на языке C# таким образом, чтобы использовать больше концепции функционального программирования, такие как неизменяемые (immutable) структуры данных вместо изменяемых (mutable), использование декларативного потока управления, например, на основе запросов LINQ вместо императивного потока управления в форме циклов. Я попробую…

0

Пишите код, который читается как спецификация

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


Стиль отвечает семантике

Какой стиль лучше? bool abc; if (Foo())   abc = Bar(); else   abc = false; или bool abc = Foo() && Bar(); ? Для меня выбор сводится к ответу на вопрос: «метода Bar полезен только ради получения возвращаемого значения или также и для выполнения некоторых побочных эффектов?» Выбор стиля должен в основном основываться на…


Продолжение выполнения внешнего цикла

Когда у вас есть вложенный цикл, иногда возникает желание перейти к следующей итерации внешнего цикла, а не внутреннего. Например, у нас есть последовательность критериев и последовательность элементов, и мы хотим определить, отвечает ли какой-либо из элементов всем критериям: match = null; foreach(var item in items) { foreach(var criterion in criteria) { if (!criterion.IsMetBy(item)) { //…


Всегда пишите спецификацию. Часть 2

Во время просмотра спецификации, даже не глядя на мой код, Крис нашел ошибку и упущение. Упущение состояло в том, что я не сказал, что будет в случае передачи в качестве ref-параметра индекса массива фиксированной длины. Как выяснилось, этот случай сводится к разыменовыванию указателя в тот момент, когда мы достигаем этой точки в коде, поэтому это…


Всегда пишите спецификацию, часть 1

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