Есть ли недостатки в использовании функций С# 3.0?

Мне нравятся функции С# 3.0, особенно лямбда-выражения, автоматически реализованные свойства или в подходящих случаях, также неявно типизированные локальные переменные (ключевое слово var), но когда мой босс обнаружил, что я их использую, он попросил меня не использовать какой-либо С# 3.0 в работе. Мне сказали, что эти функции не являются стандартными и запутанными для большинства разработчиков, и его полезность сомнительна. Мне было запрещено использовать только функции С# 2.0, и он также рассматривает возможность запрещения анонимных методов.

Поскольку мы ориентируемся на .NET Framework 3.5, я не вижу причин для этих ограничений. На мой взгляд, возможно, единственным недостатком является то, что моим небольшим сотрудникам и боссу (также программисту) придется изучить некоторые основы С# 3.0, которые не должны быть трудными. Что вы думаете об этом? Правильно ли мой босс, и я что-то упускаю? Есть ли веские причины для такого ограничения в компании-разработчике, где С# является основным языком программирования?

10 ответов

У меня был подобный опыт (попросил не использовать Generics, потому что может быть запутанным для моих коллег).

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

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

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

Что касается вашей конкретной проблемы - не использовать лямбда. Многие обновления BCL имеют перегрузки, которые принимают делегаты в качестве параметров - они во многих случаях наиболее легко выражаются как lambdas, а не используют их таким образом, игнорируя некоторые из новых и обновленных применений BCL.

Что касается проблем с вашими сверстниками, которые не могут научиться лямбдам, я обнаружил, что Jon Skeets С# глубоко разбирается в том, как они эволюционировали от делегатов таким образом, который легко поддается наблюдению и действительно открывал глаза. Я бы порекомендовал вам получить копию для вашего босса и его коллег.


Вам нужно понять, что языковые (и другие) улучшения предназначены для того, чтобы предоставить разработчикам больше возможностей и сделать их более эффективными при выполнении поставленной задачи и что, если он не позволит им неизвестно причины:

  • Команда разработчиков не обладает наибольшим потенциалом.
  • Компания не выигрывает от повышения эффективности/производительности.

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


Мне сказали, что эти функции не являются стандартными и запутанными для большинства разработчиков, и его полезность сомнительна. Мне было запрещено использовать только функции С# 2.0, и он также рассматривает возможность запрещения анонимных методов.

Предположительно грубо переводится значение вашего босса...

Эти функции меня смущают, и я не считаю их полезными, потому что я их не понимаю.

Что довольно симптоматично парадокс Blub (ну или просто просто лень). В любом случае нет никакой пользы в том, что он говорит, и вы должны начать искать другую работу, если он будет продолжать эту дорогу.


Жюри по-прежнему не имеет долгосрочных последствий для некоторых функций, но если их основным обоснованием является "это запутывает других разработчиков" или что-то подобное, я буду обеспокоен качеством таланта.


Если проект строго С# 3+ с этого момента, вы не можете сломать сборку, включив эти элементы. Однако перед их использованием вы должны знать следующее:

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


Мне нравятся функции С# 3.0, особенно лямбда-выражения, автоматические свойства или в соответствующих случаях неявно введенные локальные переменные (var ключевое слово), но когда мой босс показал что я использую их, он не спросил меня использовать любые функции С# 3.0 в работе. я было сказано, что эти функции не стандартным и запутанным для большинства разработчиков и его полезность Сомнительно.

Он получил точку.

Следуя этой линии мысли, допустим правило против общих коллекций, поскольку List не имеет никакого смысла (угловые скобки? wtf?).

Пока мы находимся на этом, позвольте устранить все интерфейсы (когда вам когда-нибудь понадобится класс без какой-либо реализации?).

Черт возьми, отбросьте наследство, так как в наши дни это так сложно (есть -это-есть? не можем ли мы все просто быть друзьями?).

И использование рекурсии является основанием для увольнения (Foo() вызывает Foo()? Конечно, вы должны шутить!).

Вернитесь к реальности.

Не то, чтобы функции С# 3.0 были путаницей для программистов, что функции запутывают вашего босса. Он знаком с одной технологией и упрямо отказывается расстаться с ней. Вы собираетесь войти в Сумеречную зонуBlub Paradox:

Программисты очень привязаны к своим любимые языки, и я не хочу причинить вред любым чувствам, поэтому объясните этот момент, я собираюсь использовать гипотетический язык, называемый Blub. Blub падает прямо в середине континуум абстрактности. Это не самый мощный язык, но это больше мощный, чем Cobol или машина язык.

И на самом деле наш гипотетический Blub программист не использовал бы ни один из их. Конечно, он не будет программировать машина язык. То, что для компиляторов. А что касается Кобола, он не знает, как можно все, что с ним связано. Это даже не имеют x (функция Blub по вашему выбору).

Пока наш гипотетический Blub программист смотрит вниз континуум, он знает, что смотрит вниз. Языки, менее эффективные, чем Blub, явно менее мощный, потому что у них отсутствует какая-то особенность, которую он использовал к. Но когда наш гипотетический Blub программист смотрит в другую направление, вверх по континууму мощности, он не понимает, что он смотрит вверх. Какие он видит просто странные языки. Он вероятно, считает их эквивалентный по мощности Blub, но с все эти другие волосатые вещи, брошенные в также. Блюб достаточно хорош для него, потому что он думает в Blub.

Когда мы переходим к точке зрения программист, использующий любой из языки выше власти континуум, однако мы находим, что он в поверните взгляд на Blub. Как ты можешь получить что-нибудь в Blub? Это не даже имеют y.

С# 3.0 не сложно. Конечно, вы можете злоупотреблять им, но это не сложно или смущает любого программиста с более чем неделю опыта С# 3.0. Ваши босс-навыки только что отстали, и он хочет довести остальную команду до своего уровня. НЕ ПОЗВОЛЯЙТЕ ЕГО!

Продолжайте использовать анонимные funcs, ключевое слово var, авто-свойства и то, что у вас есть в вашем сердце. Вы не потеряете работу над этим. Если он обманывается, смеешься.


Если Microsoft не определила стандарт, и это были функции, которые они добавили на язык, отличный от Microsoft, я бы сказал, что у вашего босса может быть точка. Однако, поскольку Microsoft определяет язык и использует эти самые функции при реализации значительных частей .NET 3.5 (и 4.0), я бы сказал, что вы были бы глупыми игнорировать их. Вы не можете использовать некоторые из них - например, var, возможно, не приемлемы во всех средах из-за стандартов кодирования, но полная политика избежания новых функций кажется необоснованной.

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


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

Ключевое слово var можно, конечно, злоупотреблять, но в большинстве случаев сокращает избыточный код. LINQ - это главное, что вы хотите от .Net 3.5 из-за огромного экономии времени в количестве кода, который вы должны написать. Ваш босс должен поощрять вас использовать его. Кроме того, библиотеки базового класса теперь принимают делегаты - это параметры, поэтому вы будете ограничивать себя, не используя их. Лямбда - это просто модный синтаксический сахар, чтобы сделать делегатов более чистыми.

Я бы назвал вас Эффективно интегрироваться в команды разработки программного обеспечения и Ведущий пример. Две действительно замечательные статьи о том, как бороться с командами, которые боятся перемен.


Нравится вам это или нет, если вы планируете использовать LINQ в любой ситуации, вам придется использовать некоторые из языков языка С# 3.0.

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

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


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

Недавно я перешел из дома С# с кровотечением в дом С#, который работал в основном на dot.Net 1.1 и около 2.0 проектов, используя в основном только 1.1 функции. К счастью, руководство держится подальше от кода. Большинство разработчиков любят все новые функции в новых рамках, у них просто нет времени или желания самостоятельно разобраться. Как только мне удалось показать им, как они могут облегчить собственную жизнь, они начали использовать их сами, и мы перенесли несколько проектов, чтобы получить новые языковые функции и улучшить преимущества инструмента.

licensed under cc by-sa 3.0 with attribution.