
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
member init list это довольно скользкое место . И у вас хорошая иллюстрация этому :
при вызове CLineByIdxAndProc(1.0,2.0,3,3) будет ошибка. Деление на 0
к чему должна быть отнесена ошибка, хотя бы для журнала ? конструктор ещё не вызывался. Экземпляр класса даже не инстанцировался, не факт что место выделено. На экземпляр нельзя сослаться никак. Были-бы исключения в языке - застрелись писать обработчик.
Точно, спасибо большое! Теперь я понял логику отказа от member initializer list в пользу readonly. Из тела конструктора можно хоть какой-нибудь условный DivideByZeroException бросить, а в контексте защиты полей readonly ничем не уступает.
С TDD подходом можно сразу добавить тест кейс с вертикальной линией и доверить реализацию стажеру.
Жаль в MQL нет автотестов. Можно конечно скриптов с юнит тестами нагородить, но это ни в какое сравнение не идет с нормальными инструментами для тестирования. Вот почему человеку, который не интересуется алготрейдингом, не стоит начинать программирование с MQL. А даже если нужен алготрейдинг, то есть смысл пойти выучить другой язык прежде чем начать программировать на MQL - так даже быстрее будет.
Как вы думаете, книжку какой версии C# лучше купить начинающему? Много рекомендованой литературы по C#6, но я смотрю там уже и для C#13 бестселлеры есть. Может ли быть такое, что я буду учить слишком свежий C#, а потом с легаси кода чехлы снять совсем не смогу? Или лучше сразу посвежее?
Язык совместим сверху-вниз. поэтому гнаться за последними версиями особого смысла не имеет. Те же Трюэлсон и Рихтер регулярно обновляют свои книги, большая часть которых была написана еще во времена net framework а потом со временем дополнялась нововведениями. Большее значение имеет code style в проектах. Он разный. В основном пишут либо ООП, либо функционально. Основное различие новых версий в том, что могут использоваться определенные конструкции вроде pattern matching, разыменование кортежей или типы record. Действительно фундаментальные вещи появились давно. Это await/async и tasks (~2012), generics, linq (2008), работа с потоками и базовые концепции (<2008).
Язык совместим сверху-вниз. поэтому гнаться за последними версиями особого смысла не имеет. Те же Трюэлсон и Рихтер регулярно обновляют свои книги, большая часть которых была написана еще во времена net framework а потом со временем дополнялась нововведениями. Большее значение имеет code style в проектах. Он разный. В основном пишут либо ООП, либо функционально. Основное различие новых версий в том, что могут использоваться определенные конструкции вроде pattern matching, разыменование кортежей или типы record. Действительно фундаментальные вещи появились давно. Это await/async и tasks (~2012), generics, linq (2008), работа с потоками и базовые концепции (<2008).
Понял, спасибо большое!
Ну, С# точно С++ косплеет.)) Практически с него он и начался. Майкрософт взяли С++ и на его основе сделали свой язык Си шарп. Это ж известный факт.))
Да, примерно в 2000 г. первая версия шарпа была доступна для подписчиков MSDN, которым тогда был я. Помню, мне приходили физические посылки от MS, которые я получал в местном почтовом отделении. Содержание - книги по программированию, за что до сих пор спасибо.
По тем временам, разрабы мне писали, что уровень студентов в Санта-Кларе давно ниже плинтуса.
Да, примерно в 2000 г. первая версия шарпа была доступна для подписчиков MSDN, которым тогда был я. Помню, мне приходили физические посылки от MS, которые я получал в местном почтовом отделении. Содержание - книги по программированию, за что до сих пор спасибо.
По тем временам, разрабы мне писали, что уровень студентов в Санта-Кларе давно ниже плинтуса.
почему в C# не стали добавлять параметрические макросы? Я думаю, тот факт, что макросы усложняют чтение кода (при грамотном использовании - улучшают, как по мне) вряд-ли является достаточным что бы отказаться от их добавления. Должно быть что-то еще.
На сколько адекватным считается желание намазывать макросами подобным образом:
Как по мне, если бы я копипастил, то это увеличило бы вероятность опечатки. Плюс при теоретическом добавлении новых полей не будет такого, что один конструктор ты обновил, а второй забыл.
Меня бы материли если бы я делал так при работе в команде?
После MQL открываю потом visual studio (C#) и чувствую себя каким-то ограниченным без макросов.
Подсветку макросов на сайт не завезли, поэтому на сайте оно не очень хорошо визуально воспринимается.
Да, богатый у вас опыт.
Это не опыт богатый, а я старый, через 2 недели будет 60 ))
Как я помню, шарп стартанул в 2000 г. и я сразу им заинтересовался, так как MS в г**но вкладываться не будет. Тогда VC++ 98 был крайне неудобным языком для создания десктоп приложений. С этим убогим MFC ( Microsoft Foundation Classes ) создать сложную форму было мучением, примерно, как сейчас на MQL )) А использование ODBC (Open Database Connectivity) для работы с БД было танцем с бубном.
И в то же время на рынке были два замечательных продукта — Delphi и C++Builder, где гуй создавался в визуальном режиме, а работа с БД была просто сказкой. И у них обоих были крутые расширения Pascal и C++, например свойства. Я в 90-е владел агентством по аренде квартир и все ПО для работы с БД квартир писал сам, на Делфи и FoxPro. Был такой великолепный пакет для работы с БД, потом его купил MS и за несколько лет убил.
Когда появился первый релиз шарпа, я с изумлением увидел в нем все нововведения C++Builder! А потом Борланд заявил, что развитие Билдера прекращается. Среди программистов на RSDN ходили слухи, что MS подчистую скупил Билдер и на его основе сделал C#. Очень даже верю, это на Западе обычная практика.
На сколько адекватным считается желание намазывать макросами подобным образом:
Как по мне, если бы я копипастил, то это увеличило бы вероятность опечатки. Плюс при теоретическом добавлении новых полей не будет такого, что один конструктор ты обновил, а второй забыл.
Меня бы материли если бы я делал так при работе в команде?
После MQL открываю потом visual studio (C#) и чувствую себя каким-то ограниченным без макросов.
Подсветку макросов на сайт не завезли, поэтому на сайте оно не очень хорошо визуально воспринимается.
Я работал в иностранных фирмах, там всегда есть талмуд под названием CodeStyle, где описано, что можно и что нельзя использовать, вплоть до стиля форматирования исходников. В шарпе убрали дефайны в целях безопасности, я так думаю. И общей деградации среднего слоя программистов — мидлов.
На сколько адекватным считается желание намазывать макросами подобным образом:
Как по мне, если бы я копипастил, то это увеличило бы вероятность опечатки. Плюс при теоретическом добавлении новых полей не будет такого, что один конструктор ты обновил, а второй забыл.
Меня бы материли если бы я делал так при работе в команде?
После MQL открываю потом visual studio (C#) и чувствую себя каким-то ограниченным без макросов.
Подсветку макросов на сайт не завезли, поэтому на сайте оно не очень хорошо визуально воспринимается.
У меня бы ты устал обосновывать необходимость этих самых function-like macros. Они фича чистого С, в плюсах же, уже давным-давно признаны злым злом. В MQL, к сожалению, в виду отсутствия большинства (я бы сказал, что всех) вкусняшек вокруг template, приходится их использовать, но очень иногда и в очень специфических случаях, а тащить их в бизнес-логику - это либо реальная безысходность, требующая обоснований перед тех-лидом, либо по пальцам молотком за это.
PS. В твоем случае, если реально боишься когда-либо забыть в двух местах проапгрейдить, данные оборачиваются в структуру, а у структуры делается два конструктора, один копированием, в котором this = other, а вот другой, тот, который все значения должен принять. Соответственно, проапгрейдить тебе нужно только параметрический конструктор структуры, а дальше уже компилятор тебе на все места укажет. Правильная, масштабируемая архитектура называется.
В твоем случае, если реально боишься когда-либо забыть в двух местах проапгрейдить, данные оборачиваются в структуру
В том случае я не боялся забыть проапгрейдить, а просто лень было копипастить с минимальными отличиями; получился оверкилл из мира DRY. Тот базовый класс нужен только для передачи параметров. А производный класс реализует всего 2 метода, хотя я и там умудрился намазать.