Как помочь студентке по инфо-тематике? - страница 8

 
Yuriy Bykov #:
Так я и отвечал конкретно Петру, который, насколько понимаю, пишет в основном для себя. Я нисколько не призывал использовать такой подход.

Совершенно верно. Если пишешь чисто под себя и пришла в голову идея — все правила летят к черту, важнее быстрый результат, проверить мысль. А вот когда ты менеджер проекта и под тобой минимум 10 человек, и надо раз в сутки выкладывать код в копилку, тут начинаешь фильтровать. Врагу не посоветую ))

Был у меня крутой математик, но любитель выпить и по бабам. 
— Леша, я тут прогулял, но придумал новый алгоритм по DSP звука, вот условный код
— Оформляй на С, это тянет на патент. Да, ты с запахом, дуй к даме и разрабатывайте в койке новые алгоритмы )) Переходите на сухое.

Это про мифы о программистах трезвенниках

 
Реter Konow #:
На шарпе процедурно писать нельзя, это вполне известный факт.)) Там все только через ООП.)) В принципе, поэтому я не стал продолжать его изучать.. Не понравилось принуждение майкрософта.))

Как это нельзя? И кем придуман сей факт? В старших версиях C#, начиная наверное уже с Net6, есть режим Top Level State который преобразует программу в процедурный стиль:


 
Vladislav Boyko #:

MQL лишний в том списке. Он чисто для автоматизации торговли в MT. Если человек не торгует, то MQL ему не нужен. Особенно, учитывая, что он требует знаний в биржевой торговли. Можно довольно далеко продвинться в обычном языке за то время, пока будешь вкуривать, чем позиция от сделки отличается, учитывая, что ты хочешь программировать, а не торговать.

Сравните C# и C++. Это гораздо интересней. Вот вам для затравки вопросы от аматора:

  • почему в C# не стали добавлять параметрические макросы? Я думаю, тот факт, что макросы усложняют чтение кода (при грамотном использовании - улучшают, как по мне) вряд-ли является достаточным что бы отказаться от их добавления. Должно быть что-то еще.
  • почему в C# нет member initializer list? как с этим жить и чем его заменить?
  • чем отличается scope resolution operator от namespace alias operator?
  • почему в C# нет множественного наследования и как принято поступать в ситуациях, когда очень хочется множественно унаследоваться?

Главный ответ на все эти вопросы очевиден: потому что C# это другой язык программирования, не С++. Другие языки потому и успешны, что они не косплеят С++.

 
Vasiliy Sokolov #:

Как это нельзя? И кем придуман сей факт? В старших версиях C#, начиная наверное уже с Net6, есть режим Top Level State который преобразует программу в процедурный стиль:


Моя информация о С# примерно 2014-го года. Вероятно с тех пор его немало изменили. Время летит быстро, а я особо про шарп не вспоминал с тех пор. Однако, то что он раньше был полностью обьектно-ориентированный, это точно.

И потом, что значит "преобразует"? Писать процедурно можно или нет?)
 
Vasiliy Sokolov #:

Главный ответ на все эти вопросы очевиден: потому что C# это другой язык программирования, не С++. Другие языки потому и успешны, что они не косплеят С++.

Ну, С# точно С++ косплеет.)) Практически с него он и начался. Майкрософт взяли С++ и на его основе сделали свой язык Си шарп. Это ж известный факт.))
 
Реter Konow #:
Ну, С# точно С++ косплеет.)) Практически с него он и начался. Майкрософт взяли С++ и на его основе сделали свой язык Си шарп. Это ж известный факт.))
Они сделали свой язык, но он просто уменьшенная и упрощенная версия С++, который был взят как шаблон. Понятно что сейчас шарп развился и стал другой (защищенный), но начался он именно с желания майкрософт создать свой мощный язык наподобии С++, который им не принадлежал (его разработала другая компания).
 
Реter Konow #:
Ну, С# точно С++ косплеет.)) Практически с него он и начался. Майкрософт взяли С++ и на его основе сделали свой язык Си шарп. Это ж известный факт.))

Снова мимо. Майкрософт взяли за основу не C++, а Java и сделали свою версию Java, назвав ее C#. Еще у них был J# - попытка писать на java под net clr, но не пошло и они проект удалили

Реter Konow #:
И потом, что значит "преобразует"? Писать процедурно можно или нет?)

Можно процедурно писать. Я ведь Вам скриншот однострочника показал выводящих в консоль hello word.

Реter Konow #:
Моя информация о С# примерно 2014-го года. Вероятно с тех пор его немало изменили. Время летит быстро, а я особо про шарп не вспоминал с тех пор. Однако, то что он раньше был полностью обьектно-ориентированный, это точно.

Так обновите знания, это бесплатно. C# и сейчас объектно-ориентированный, просто позволяет сейчас писать в процедурном стиле. Нужные классы будут созданы во время компиляции, просто Вы их не увидите. 

 
Vladislav Boyko #:

Та можно, почему нет?)



Прикол в том, что все поля константны. Я просто сделал нужные поля публичными; благодаря member initializer list, все поля защищены, мне не нужны геттеры/сеттеры, мне не нужно париться, защищая от случайного изменения то, что не должно быть изменено после инициализации. Все удобно упаковано, не громоздко, защищено и прозрачно. Плюс я подозреваю, что такие конструкции очень хорошо оптимизируются компилятором (если создается автоматический экземпляр на каждой итерации цикла, например).

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

Теперь вопрос: как сделать аналог на C# (там нет member initializer list)? Возможно, аналог там есть (как я говорил, я не очень далеко продвинулся); если аналог все-таки есть, то хотелось бы что бы кто-то его заспойлерил, что бы в процесе изучения C# продолжать писать в привычной себе манере.

member init list это довольно скользкое место . И у вас хорошая иллюстрация этому :

                CLineByIdxAndPrc(double a_prcLeft, double a_prcRight, int a_idxLeft, int a_idxRight)
                   : prcLeft(a_prcLeft),
                     prcRight(a_prcRight),
                     idxLeft(a_idxLeft),
                     idxRight(a_idxRight),
                     coeffK((prcRight - prcLeft) / (idxRight - idxLeft)),
                     coeffB(prcLeft - coeffK * idxLeft) {}

при вызове CLineByIdxAndProc(1.0,2.0,3,3) будет ошибка. Деление на 0

к чему должна быть отнесена ошибка, хотя бы для журнала ? конструктор ещё не вызывался. Экземпляр класса даже не инстанцировался, не факт что место выделено. На экземпляр нельзя сослаться никак. Были-бы исключения в языке - застрелись писать обработчик.

 
Georgiy Merts #:
А как быть, если потребуется изменить эту линию? 

Если точки линии могут быть передвинуты, то тот мой код конечно-же не подходит для этого.

Georgiy Merts #:
Ну и в качестве своего видения прямой и использования спецификатора const - прикрепляю свой класс CPlaneStraight - Прямая на плоскости.

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

Тем более, он только для MT4. В пятерке уже целочисленные индкесы баров в качестве координат времени не годятся (учитывая precise time scale)


Хороший title

 
Vasiliy Sokolov #:
В старших версиях C#, начиная наверное уже с Net6

Как вы думаете, книжку какой версии C# лучше купить начинающему? Много рекомендованой литературы по C#6, но я смотрю там уже и для C#13 бестселлеры есть. Может ли быть такое, что я буду учить слишком свежий C#, а потом с легаси кода чехлы снять совсем не смогу? Или лучше сразу посвежее?