S>>0. Культура — ну это очевидно как бы. Для вывода пользователю эта штука с вероятностью 99% использоваться не будет. AVK>Неконсистентно с фреймворком. В фреймворке везде CurrentUICulture по умолчанию + перегрузка с явным указанием. Можно спорить с тем насколько это правильно, но уж как смогла, так смогла.
Как насчёт такой отмазки: все текстовые сериализаторы — Invariant. У нас по сути оно и есть. Десериализовать никто не обещал
Не, мы можем использовать и текущую культуру, но как я понимаю сценарии использования этой штуки, почти всегда пользователям это не понравится.
S>>1. Функция посередине кода — оно здорово затрудняет чтение кода из-за смешивания кода, который выполняется прямо сейчас AVK>Я бы не был так уверен. Просто локальные функции это очень непривычно и пока глаз не научился их читать эффективно.
Это для большинства непривычно. А я по горло их накушался, ибо в одном проекте авторы системы генерации отчётов решили поставлять код внутри форм отчётности, но не озаботились импортом кода из .cs-файлов и оставили только возможность копипастить каждый метод по отдельности. В итоге почти все отчёты с сложной логикой — один огромный метод в несколько сотен, а то и тысяч строк с кучей linq-запросов и лямбд с замыканиями внутри. Разумеется, разбираться почему оно не работает достаётся самым повидавшим жизнь, их не так жалко. Так что разбуди ночью — я часами могу типовые косяки с замыканиями и побочными эффектами Linq-запросов перечислять
Это к вопросу "больших последствий маленького решения". Я этих прелестей энтерпрайза столько накушался, что рефлекс сразу делать нормально фиг вытравишь теперь
AVK>По поводу var поначалу тоже жуткие флеймы стояли, как же так, я не увижу тип переменной, все пропало. А прошло время, люди привыкли, научились нормально называть переменные и правильно акцентировать внимание при чтении кода, и у большинства оно теперь не вызывает особых проблем с чтением.
Ну по крайней мере для примитивов я бы явный тип оставлял, от кучи багов спасает. Но это для большого кода критично, для мелких файлов перевешивает "var вперемешку с int/long отвратно читается".
Здравствуйте, Sinix, Вы писали:
S>Как насчёт такой отмазки: все текстовые сериализаторы — Invariant.
Текстовые сериализаторы, в отличие от, не предназначены для чтения глазами.
S>Не, мы можем использовать и текущую культуру, но как я понимаю сценарии использования этой штуки, почти всегда пользователям это не понравится.
ToInvariantDebugString? Потому что большинство по умолчанию будет таки текущую культуру ожидать, и возврат инвариантной это таки WTF.
S>А я по горло их накушался, ибо в одном проекте авторы системы генерации отчётов решили поставлять код внутри форм отчётности
Аналогии здесь не работают. Нужен опыт именно с шарпом.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
Здравствуйте, AndrewVK, Вы писали:
S>>Не, мы можем использовать и текущую культуру, но как я понимаю сценарии использования этой штуки, почти всегда пользователям это не понравится. AVK>ToInvariantDebugString? Потому что большинство по умолчанию будет таки текущую культуру ожидать, и возврат инвариантной это таки WTF.
+1
Только ToDebugStringInvariant тогда, чтобы следовать стилю фреймворка (ToUpper/ToUpperInvariant). И ToInvariantString тож неплохо по аналогии переименовать.
S>>А я по горло их накушался, ибо в одном проекте авторы системы генерации отчётов решили поставлять код внутри форм отчётности AVK>Аналогии здесь не работают. Нужен опыт именно с шарпом.
Код отчётов — шарп Добрая половина ошибок была как раз из-за слишком вольного обращения с разделяемым состоянием. Но это не в порядке спора, если хочется самому понаступать на эти грабли, я мешать не буду
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, Sinix, Вы писали:
Кстати, по "заваленной" сборке: у нас новый косяк вылез, пакеты в артефакты не заливаются:
nuget pack Main\nuget\CodeJam.Main.nuspec -version "$env:nugetVersion"
Attempting to build package from 'CodeJam.Main.nuspec'.
Successfully created package 'C:\projects\codejam\CodeJam.1.0.0-alpha990.nupkg'.
Push-AppveyorArtifact CodeJam.$env:nugetVersion.nupkg
Resolve-Path : Cannot find path 'C:\projects\codejam\CodeJam.1.0-alpha990.nupkg' because it does not exist.
At C:\Program Files\AppVeyor\BuildAgent\Modules\build-worker-api\build-worker-api.psm1:207 char:18
Это наше, или надо в саппорт appveyor отписаться?
Разница в "CodeJam.1.0.0-alpha990" vs "CodeJam.1.0-alpha990.nupkg".
UPD: Да, у перфтестов поправил таргетинг, на 4.5 должно работать. Поправь nuspec + cmd для них как время будет
Здравствуйте, Sinix, Вы писали:
S>Это наше, или надо в саппорт appveyor отписаться?
Имена мы сами формируем, но вот почему они поменялись — вопрос. Надо смотреть.
S>UPD: Да, у перфтестов поправил таргетинг, на 4.5 должно работать. Поправь nuspec + cmd для них как время будет
ОК.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK>>>Аналогии здесь не работают. Нужен опыт именно с шарпом. S>>Код отчётов — шарп AVK>Откуда тогда там локальные функции?
Лямбды / анонимные методы ничем в этом плане от локальных функций не отличаются.
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, Sinix, Вы писали:
S>>Лямбды / анонимные методы ничем в этом плане от локальных функций не отличаются. AVK>Тут я не согласен.
Не согласен с "не согласен"
var a = 10;
Action b = ()=>Console.WriteLine(a);
void B2()=>Console.WriteLine(a);
...
a = 123;
...
b();
B2();
В плане "поменял локальную переменную — завалился левый код, объявленный на экран выше" разницы никакой.
Здравствуйте, AndrewVK, Вы писали:
AVK>Имена мы сами формируем, но вот почему они поменялись — вопрос. Надо смотреть.
Ещё чего-то не хватает. Кмк это уже надо в саппорт писать.
Successfully created package 'C:\projects\codejam\CodeJam.PerfTests.MSTest.1.3.0-alpha991.nupkg'.
Push-AppveyorArtifact **\*.nupkg
Push-AppveyorArtifactInternal : Cannot bind argument to parameter 'FullPath' because it is null.
At C:\Program Files\AppVeyor\BuildAgent\Modules\build-worker-api\build-worker-api.psm1:209 char:42
+ Push-AppveyorArtifactInternal -FullPath $fullPath -FileName $File ..