Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, Pzz, Вы писали:
Pzz>>Это если ему позволят в дизайн. А если "вот тебе бага, надо починить за два дня", то какой уж там дизайн? S>Дизайн тоже бывает разного уровня. S>Ну, то есть code style, действительно, смотреть большого смысла не имеет — его всё равно можно зафорсить тулчейном. Хотя, скажем, если кандидат показывает такое
, то сразу понятно, что ему будет тяжело работать в команде. Потому, что он явно не дорос даже до понимания того, что такое code style — и для него ошибки из тулчейна будут просто пустым звуком.
Я знал человека, он писал вот примерно в таком стиле. Но у него был великолепный дар: он умел находить репения проблем на стыке софтвария и железа. Ответ он выдавал в виде примерно вот такого кода, потом мы, программисты, переписывали по-человечески.
Безусловно, это был очень полезный человек в команде, и его там очень ценили.
Здравствуйте, Sharov, Вы писали:
S>Что с этим кодом не так, помимо того, что не скомпилируется? Кроме шуток, особых косяков не вижу,
Упс, написал какую-то фигню. Думал одно, писал другое.
Вот "правильный неправильный" код. Сделаем проблему более очевидной:
public static IEnumerable<int> GetAccumulatingSum(this IEnumerable<int> source)
{
if(source == null)
throw new ArgumentNullException(nameof(source));
var s = 0;
foreach(var v in source)
yield return s += v;
}
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, Sharov, Вы писали:
S>>Что с этим кодом не так, помимо того, что не скомпилируется? Кроме шуток, особых косяков не вижу, S>Упс, написал какую-то фигню. Думал одно, писал другое. S>Вот "правильный неправильный" код. Сделаем проблему более очевидной: S>
S> public static IEnumerable<int> GetAccumulatingSum(this IEnumerable<int> source)
S> {
S> if(source == null)
S> throw new ArgumentNullException(nameof(source));
S> var s = 0;
S> foreach(var v in source)
S> yield return s += v;
S> }
S>
Здравствуйте, Sharov, Вы писали: S>Я выше же отписал по возможной проблеме.
Приведённая вами особенность — чисто стилистическая, я бы её не стал относить к проблемам совсем.
А вот то, что валидация аргументов происходит вовсе не в вызове метода — штука принципиальная. У нас потенциально в стектрейсе вообще может не быть того фрейма, в котором в метод передаётся null, потому что итерировать мы начнём где-то в километрах кода от инициализации.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Worminator X, Вы писали: WX>Код с гитхаба может спионерить кто угодно (либо попросить написать за оплату знакомого студента). Это совершенно ничего не говорит о навыках кандидата.
Это настолько идиотская идея, что её нет смысла обсуждать.
Ну вот спионерил кто-то код с гитхаба или у знакомого студента — дальше-то что? Это поможет дойти до собеседования. В первые 15 минут выяснится, что кандидат соврал, а это поставит крест на дальнейшем трудоустройстве.
Потому что с плохим знанием шарпов ещё можно претендовать на позицию, хоть и джунскую, а с готовностью врать работодателю даже уборщиком не возьмут. Всё, убер-план пал под натиском реальности.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, Sharov, Вы писали: S>>Я выше же отписал по возможной проблеме. S>Приведённая вами особенность — чисто стилистическая, я бы её не стал относить к проблемам совсем. S>А вот то, что валидация аргументов происходит вовсе не в вызове метода — штука принципиальная. У нас потенциально в стектрейсе вообще может не быть того фрейма, в котором в метод передаётся null, потому что итерировать мы начнём где-то в километрах кода от инициализации.
Я так понял, что речь идет о ленивости, но каким образом мы потеряем нужный(проблемный) фрейм?
Приведенный фрагмент кода лежит в основе как минимум Linq to objects, поэтому не совсем понятно, что с ним не так...
U>Спасибо за отклик!
U>Прошу, по возможности, прислать примеры вашего актуального кода на C#, чтобы не тратить не это время при созвоне.
U>подмывает ответить этим https://www.youtube.com/watch?v=3t5DB0JRcgA U>вот реально что они хотят увидеть? накопипастить годного кода я могу. чего им это даст? конкретизировали бы хотябы какая область интересна
Нам пользователи часто тест-кейсы с багами на форуме прикрепляют, так вот есть такие тесткейсы — прямо заглядение, от одного вида
private static readonly string resultJsonFileName
кончаешь и понимаешь, что писал-то код жесткий профессионал.
Здравствуйте, Sharov, Вы писали: S>Я так понял, что речь идет о ленивости, но каким образом мы потеряем нужный(проблемный) фрейм? Очень просто.
Ошибка — в функции GetAS(). В стектрейсе её нет:
Unhandled exception. System.ArgumentNullException: Value cannot be null. (Parameter 'source')
at X.GetAccumulatingSum(IEnumerable`1 source)+MoveNext()
at Program.Print(IEnumerable`1 s)
at Program.Main()
S>Приведенный фрагмент кода лежит в основе как минимум Linq to objects, поэтому не совсем понятно, что с ним не так...
Нет, не лежит.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Therefore it is recommended to split the method into two: an outer method handling the validation (no longer lazy) and an inner (lazy) method to handle the iteration.
M>Therefore it is recommended to split the method into two: an outer method handling the validation (no longer lazy) and an inner (lazy) method to handle the iteration.
Ну вот и прекрасно.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, Sharov, Вы писали: S>>Я так понял, что речь идет о ленивости, но каким образом мы потеряем нужный(проблемный) фрейм? S>Очень просто. S>Ошибка — в функции GetAS(). В стектрейсе её нет: S>
S>Unhandled exception. System.ArgumentNullException: Value cannot be null. (Parameter 'source')
S> at X.GetAccumulatingSum(IEnumerable`1 source)+MoveNext()
S> at Program.Print(IEnumerable`1 s)
S> at Program.Main()
Ну да, особенности ленивых вычислений.
S>>Приведенный фрагмент кода лежит в основе как минимум Linq to objects, поэтому не совсем понятно, что с ним не так... S>Нет, не лежит.
We’ve just hit a design flaw in C#. Iterator blocks in C# simply don’t work nicely when you want to split execution between "immediate" (usually for validation) and "deferred". Instead, we have to split our implementation into two: a normal method for validation, which then calls the iterator method for the deferred processing: