Здравствуйте, Begemot_, Вы писали:
B_>Здравствуйте, Visor2004, Вы писали:
V>>подразумевается буквально префиксы у полей, у вас каждое поле начинается со знака подчеркивания, что не рекомендуется делать микрософтом. B_>Да я знаю что MS этого требования нету, но в том стандарте кодирования что мне дали написано что приватные поля класса должны начинаться с "_", и это кстати, единственное что мне там активно не понравилось Ну и решарпер с настройками по умолчанию тоже требует того же. Мне конечно не понравилось, но что делать сказали надо, значит надо. Тем более что отрефакторить готовый код перед отсылкой не сложно
>>К слову, топикстартера с таким кодом я бы взял, причём даже не на джуниора. B_>Ну у меня тоже есть версия что отказали именно по этому, им вроде нужны джуниоры и когда я сказал что шарпа в глаза не видел — сказали, что ничего страшного, подойду. Видимо код их смутил, не стоило так серьёзно относится к тестовому заданию наверное
Да, скорей всего вы правы по поводу причины отказа — ваш код на джуниора не тянет, тут чувствуется гораздо более высокий уровень. Джуниор, как мне кажется, не додумался бы Monitor.Pulse/Wait использовать. Так что дело даже не в стиле оформления.
А по поводу префиксов не парьтесь — их практически все используют — надо же как-то отличать локальные переменные от полей. А писать this постоянно — утомительно и громоздко.
C>1.Проверки на bool. Везде пишете ==false, в C# для булевых переменных не принятно обычно
Не принято, но вообще имеет смысл. Я сознательно в своём коде в условиях пишу if (condition == false) вместо if (!condition) просто потому, что эту false всегда легко видно (студия ещё и цветом выделяет как ключевое слово), а восклицательный знак маленький, иногда его не замечаю. Впрочем, я на C# за деньги не пишу, так что могу творить в своём коде всё, что хочу.
Здравствуйте, alexzz, Вы писали:
C>>1.Проверки на bool. Везде пишете ==false, в C# для булевых переменных не принятно обычно
A>Не принято, но вообще имеет смысл. Я сознательно в своём коде в условиях пишу if (condition == false) вместо if (!condition) просто потому, что эту false всегда легко видно (студия ещё и цветом выделяет как ключевое слово), а восклицательный знак маленький, иногда его не замечаю. Впрочем, я на C# за деньги не пишу, так что могу творить в своём коде всё, что хочу.
Не принято, потому что в отличие от C++ в C# и так нельзя в if() подсунуть что-либо другое, кроме bool.
Писать if (b == false) имеет смысл только в случае, когда b имеет тип bool? (nullable bool). Тогда b может иметь три значения: null, true, false.
Здравствуйте, sergeyt4, Вы писали:
C>>>1.Проверки на bool. Везде пишете ==false, в C# для булевых переменных не принятно обычно
A>>Не принято, но вообще имеет смысл. Я сознательно в своём коде в условиях пишу if (condition == false) вместо if (!condition) просто потому, что эту false всегда легко видно (студия ещё и цветом выделяет как ключевое слово), а восклицательный знак маленький, иногда его не замечаю. Впрочем, я на C# за деньги не пишу, так что могу творить в своём коде всё, что хочу.
S>Не принято, потому что в отличие от C++ в C# и так нельзя в if() подсунуть что-либо другое, кроме bool. S>Писать if (b == false) имеет смысл только в случае, когда b имеет тип bool? (nullable bool). Тогда b может иметь три значения: null, true, false.
Раз уж тебя всплыла, ещё один довод в пользу явной проверки на false:
if (a && b && c == false)
{
}
if (!(a && b && c))
{
}
У оператора == приоритет ниже, чем у !, поэтому нет необходимости в лишних скобках, которые уменьшают читаемость кода.
Здравствуйте, Begemot_, Вы писали:
B_>Больше комментариев нет, а мне вот интересно что-же так такого страшного? Если бы дело в том что плохо написал задание, там какие-то проблемы или плохой код — я бы понял, но смущает именно упор на том что это "написано не на С#". Кто-нибудь может показать вкратце где тут проблемы и как надо было правильно делать.
Долго разрабатываю на С++ & C#. Если не придираться к мелочам — ваш код хороший, каких-либо концептуальных проблем. Главная ошибка которую вы допустили — написали слишком хороший и сложный код для понимания дебилам которые его проверяли. Если вы огорчены, то рассматривайте "эту неудачу" как науку на будущее. Есть старая пословица — у обычного software developer при виде технического представителя работодателя вид должен быть лихой и придурковатый. А вы их вместо этого унижаете вместо этого своим интеллектом. Теоретически надо радоваться, но я не нахожусь в вашей ситуации
Re[4]: Уши C++ или C++ style vs C# style
От:
Аноним
Дата:
01.06.13 17:49
Оценка:
Здравствуйте, GGoga, Вы писали:
GG>Все имхо, но мое отношение к тестам — резко отрицательное. Нервы и личное время дороже и можно вполне устроиться без оного.
Если я сижу без работы, то всегда пишу все тестовые задания, даже те которые на неделю и особенно по незнакомым темам — чисто в порядке собственного экспириенса.
Re[3]: Уши C++ или C++ style vs C# style
От:
Аноним
Дата:
01.06.13 18:11
Оценка:
Здравствуйте, Философ, Вы писали:
SS>>2. Ваш BegBlockedQueue2 не реализует IEnumerable<T> и других итерфейсов, обычных для .net коллекций. Ф>круто, ч0! Ф>здесь реализация этого интерфейса вообще-то сильно усложняет задание. Ф>оно нужно?
Нужно... Автора просили писать в стиле С#, а IEnumerable<T> это и есть часть стиля C#.
Оттого и не понравились, наверное, циклы for, ибо IEnumerable работает с foreach.
Здравствуйте, Begemot_, Вы писали:
B_>Лет 10 пишу в основном на С++ и немного на других языках, C# не пробовал.
Возьмите меня в подаваны? Пожалуйста.
B_>Прочел полкнижки по шарпу, написал задание. Вердикт был в стиле "вы были правы, это написано на с++, а не c#, так что к сожалению не подойдете".
Они не правы.
B_> Предложили работу джуниором на С# честно сказал что его не знаю, но давно думаю освоить. Сказали — мы верим что с вашим опытом вы сможете, напишите тестовое задание, а мы посмотрим.
Зачем вам джуниорская позиция, вы вполне можете быть мидлом.
B_>Больше комментариев нет, а мне вот интересно что-же так такого страшного? Если бы дело в том что плохо написал задание, там какие-то проблемы или плохой код — я бы понял, но смущает именно упор на том что это "написано не на С#". Кто-нибудь может показать вкратце где тут проблемы и как надо было правильно делать.
Я нашел в вашем коде недостаток, который видимо заметили работодатели.
Барабанная дробь! В вашем коде не применены интерфейсы.
Вы наверное удивлены, но это самый основной недостаток, который я увидел. Другое, как справедливо заметили предыдущие коллеги — мелочи.
Дело в том, что когда вас просят написать какой-то класс на c#, особенно когда это коллекция, нужно задуматься о применении интерфейсов. IEnumerable<T>, ICollection<T>, IQueue<T>.
Благодаря этим интерфейсам, вы зададите архитектуру класса которая вам нужна, без доп. коллекций(видимо этого от вас ждали).
Плюс, вам станут доступны методы из LINQ для этих коллекций.
For example, вы хотите реализовать связанный список на C#, реализуете в своем связанном списке интерфейс IEnumerqable<T> и вот по вашему списку можно пройти циклом Foreach.
По вашей коллекции нельзя, к сожалению.
Вот собственно и все. Может кто-то найдет еще что-то. Но я думаю у вас там с многопоточностью все в порядке.
Здравствуйте, Begemot_, Вы писали:
B_>p.s. Вопрос не о том сделано ли задание хорошо или плохо, вопрос о стиле кода — что в нем неправильного с точки зрения C# и что показывает на привычку писать на C++.
Предлагаю просто поставить resharper, прогнать проверки на StyleCop и Visual Studio Code Analysis\FxCop.
Здравствуйте, Begemot_, Вы писали:
B_>Лет 10 пишу в основном на С++ и немного на других языках, C# не пробовал. Предложили работу джуниором на С# честно сказал что его не знаю, но давно думаю освоить. Сказали — мы верим что с вашим опытом вы сможете, напишите тестовое задание, а мы посмотрим. Прочел полкнижки по шарпу, написал задание. Вердикт был в стиле "вы были правы, это написано на с++, а не c#, так что к сожалению не подойдете".
Нормальный код. Может быть усомнились в других качествах, а в официальном ответе просто соврали.