• Стоит ли мне учить delphi после C# ради смены работы?

    @Alex_Builder
    Не бойтесь Дельфей. Например, меня большой опыт как на С++/C# так и на Дельфях.
    Современные Дельфи по сути мало чем отличаются от C#. У них даже похожие названия многих библиотечных классов и похожие названия методов в class helper-ах. Дженерики тоже очень похожи.
    Есть и атрибуты как в C#, а так же добавили похожий RTTI и рефлексию.
    Даже такой класс как TStringBuilder есть, хотя на Дельфях он практически и не нужен, поскольку Дельфи позволяют прямое и очень быстрое манипулирование символами строки или частями строки как и C++.
    В последней версии Дельфей даже появилась возможность объявления переменных по месту с самовыведением типа (аналог auto на C++ или var на C#)

    Плюсы Дельфей в сравнении с C#:
    - Найтив для любой поддерживаемой платформы (при использовании библиотеки FMX) с отсутствием подтормаживания на JIT компиляцию. При компоновке по умолчанию вы получаете готовый к запуску исполняемый фаил (exe-шник в случае Win), который не нуждается в установке каких-либо дополнительных фреймворков или runtime-библиотек.
    - Для 64-х битных приложений конечный код в большинстве случаев работает чуть быстрее чем аналогичный на С# (хотя это уже и не существенно). Но при этом в нагруженном приложении отсутствуют какие либо даже минимальные задержки на сборку мусора, что может быть, например, более предпочтительно для индустриального сектора.
    - В разы меньшее потребление памяти на аналогичных задачах.
    - Возможность прямого доступа к памяти. Возможность работы с указателями на любые структуры в любой момент. Не нужно заморачиваться с unsafe блоками на C# для повышения быстродействия, которые все равно имеют ограничения.
    - Более гибкая работа с конструкторами, деструкторами и свойствами классов.
    - Наличие некоторых удобных языковых чисто паскалевских или object-паскалевских конструкций как то, например, возможность более удобного присвоения result в функциях наравне c exit(...) (аналог return в C#);
    конструкции"set of" или "class of", прямых аналогов которых нет в C#. Например, "class of" решает половину вопросов рефлексии без собственно применения медленного механизма рефлексии.
    - Возможность процедурного программирования. Не нужно городить статические классы только ради пары-тройки методов. А так же вложенные процедуры/функции.
    - Прямой доступ к родному API без особых заморочек (хоть для Win, хоть для POSIX) и почти бесшовная работа с COM и ActiveX.
    - Гораздо более легкий доступ к исходному коду стандартной библиотеки и более простой способ пройтись по ней в момент отладки.
    - Возможность писать куски кода прямо на ассемблере в 32х или 64х битном коде (если очень надо, конечно).
    - Очень хорошие компоненты доступа к большому числу баз данных прямо из коробки (FireDAC).
    - Паскалевская структура unit-ов c раздельным объявлением и реализацией (что ближе к разделению на заголовочные и имплементационные части C++), а так же необходимость объявления сверху вниз все же способствует более строгому и грамотному подходу к архитектуре в большом проекте, хотя и безусловно требует больше писанины и планирования (как отчасти и на C++).

    Минусы Дельфей по сравнению с C#:
    - необходимость ручной очистки памяти за исключением строк/записей/и интерфейсов (что, наверное, по началу самое страшное для программистов с менеджет сред). Почти везде необходим try-finally, ну и компоненты типа madExcept тут в помощь. Зато нет порой трудноуловимых утечек, например, из-за ссылок на статические классы как в C#;
    - Как следствие Дельфи требуют более хорошего понимания принципов работы с памятью, а так же хорошего понимания работы ARC механизма для строк и особенно для интерфейсов, где этот механизм можно явно перекрывать. И особенно в свете наличия таких новых атрибутов для ARC механизма как [Weak] и [Unsafe].
    - более многословный и архаичный синтаксис begin...end вместо {...} / := вместо = / необходимость отделения объявления от имплементации и т.п.; оператор case of ( аналог switch в C#) не допускает выбор по строчному значению / оператор for позволят только прямой или обратный проход по счетчику или по экземплярам коллекции (аналог foreach); нет префиксно-постфикстных инкрементов/декрементов типа ++/-- (хотя есть операторы Inc/Dec, которые напрямую транслируются в соответствующие быстрые ассемблерные команды)
    - Много исключений и выкрутасов для обратной совместимости (хотя далеко и не так много как на C++). Например, классически строки индексируются с 1 для совместимости с древними короткими AnsiString,
    но при этом новые компиляторы для мобилок индексируют их с 0. Поэтому, либо нужно писать разный код для десктопа и мобилок, применяя блоки {$IFDEF ... } в коде, либо пользоваться новыми helper-ами для строк.
    - Из-за необходимости классического объявления сверху-вниз и отделения объявления от имплементации существует проблема т.н. circular reference которая требует более продуманного чем для C# дизайна классов или объединения их в одном юните
    - нет развитых Лямда-выражений (есть только анонимные функции)
    - нет удобного LINQ (особенно недостает LINQ for Object)
    - Стандартная библиотека менее всеобъемлющая чем на С#.
    - Нет такого навороченного dataset-а на стороне клиента как на C# (хотя, от его использования многие через некоторое время и так отказываются в пользу самописных или сторонних т.н. объектов бизнес-логики)
    - Более сложный подход к просмотру содержимого объекта в момент отладки. В VS это удобнее и информативнее, а на Дельфи очень часто приходится приводить к нужному классу ручками.

    Дельфи сейчас менее востребованы чем C#. Поскольку во внутри-корпоративном и бизнес-секторе в основном их вытеснил C#.
    Но на десктопе полно еще проектов и на Дельфях. Например утилиты Auslogics или серьезный пакет Altum Designer и т.п. Много осталось проектов как раз в индустриальном секторе, отчасти потому, что на Дельфях очень просто в рамках приложения спуститься на более низкий уровень доступа к памяти и кода вплоть до чистого ассемблера как и на C++, но при этом одновременно проще писать и прикладное ПО (без необходимости постоянной прямой работы с указателями).
    Ответ написан
  • Как ток понимает, что ему нужно разделиться по проводнику, где параллельное соединение резисторов?

    Moskus
    @Moskus
    Вы там что-то приняли из запрещенных препаратов? Какое еще "ток понимает"?

    Электрическое поле, блин, распространяется в проводниках, при подключении проводников к источнику питания. Согласно их свойствам. И уже из-за поля свободные электроны начинают двигаться (то есть течёт ток).
    Ответ написан
  • C# - Как исправить ошибку - Индекс находился вне границ массива?

    mindtester
    @mindtester Куратор тега C#
    https://youtu.be/UtO6HIp1908?list=RDUtO6HIp1908
    скорее всего причина на скрине
    pk91U3j.png
    Ответ написан
  • Битовый сдвиг и установка режимов на МК atmega8?

    Ocelot
    @Ocelot
    WGM12 равен трём.
    (1 << WGM12) равно 0b00001000 (единица, сдвинутая на три бита влево)
    TCCR1B |= (выражение) это побитовое или, устанавливает в единицу те биты регистра TCCR1B, которые у правого операнда равны единице, а остальные не трогает. Например:
    TCCR1B = 0b10101010;
    TCCR1B |= 0b00001111;
    теперь TCCR1B будет равен 0b10101111;
    Ответ написан
  • Почему светятся LED-лампочки, даже когда свет выключен?

    anthtml
    @anthtml
    Системный администратор программист радиолюбитель
    У LED-ламп очень малое потребление тока и обычно большой диапазон рабочего напряжения, чаще это 85-260В, поэтому они светятся даже от малейшей утечки тока.
    Частые причины утечки:
    1. Выключатель с подсветкой - в цепь постоянно под напряжением, его не хватает чтобы зажечь обычную или галогеновую лампу, но вполне хватает для подпитки светодиодной или энергосберегайки
    2. Выключатель разрывает не ту цепь - в одно время правила предписывали схему где выключатель разрывает нулевую шину, а не фазную, типо для безопасности чтоб током меньше ударило, такая схема распространенно встречается в хрущевках и некоторых их последователях. она применима только для ламп накаливания, т.к. диодные и люминесцентные опять же получают утечку через железобетонные конструкции здания, паралленьные линии и тп.
    3. Бывают иногда и другие реже встречающиеся факторы
    Ответ написан
  • Какая разница между public function и public static function?

    @alexalexes
    Если делать статику:
    class any_class
    {
      public static function add()
      {
      }
    }

    ... то, чтобы воспользоваться методом, не надо создавать объект, классу которого принадлежит этот метод, он доступен, если есть описание класса.
    any_class::add()
    А так лишний раз создавать объект по любому поводу, чтобы воспользоваться методом add().
    class any_class
    {
      public function add()
      {
      }
    }

    $any_class_object = new any_class;
    $any_class_object->add();

    Если методы общеупотребительные, и используются на каждый чих, конечно, их выгодно делать статичными.
    Ответ написан
  • Как рассчитать Периметр и Площадь треугольника в Class?

    zagayevskiy
    @zagayevskiy
    Android developer at Yandex
    Наследование подразумевает отношение "является". Является ли линия точкой? Нет. А треугольник является точкой? Нет. Так за каким же фигом ты их наследуешь так? Треугольник это три точки. Причём не любые, а три различные точки, не лежащие на одной прямой. Этим инвариантам треугольник удовлетворять обязан.
    Площадь и периметр считаются из трёх точек.
    Ответ написан
  • Есть ли большой туториал для изучения С# desktop + DB?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Лучшей книгой для вас будет Эндрю Троелсен "Язык программирования C# 6.0 и платформа .NET 4.6".
    Прекрасная книга для профессионалов, рассказывает обо всём в языке и почти обо всех возможностях и использованиях. В первую очередь, предназначена для программистов, которые уже умеют программировать, но не знают язык C#. В ей всё структурировано на разделы, каждый из них можно читать независимо и использовать как справочник.
    У этой книги есть только один недостаток - написана для профессионалов, и автор пишет, как делать, но не пишет, почему так делать - вы и так уже это понимаете, иначе книга стала бы совсем уж гигантской.

    Рекомендую взять время и попробовать написать несколько консольных программ на c#, начиная с моего любимого решателя квадратных уравнений :) и работы со списками (простой телефонный справочник). И только после этого начинайте работать с WPF.

    А вот очень приличный учебник по wpf:
    https://professorweb.ru/my/WPF/base_WPF/level1/inf...
    Довольно суховато написано, но с неплохими примерами.

    И опять же, рекомендую не начинать делать вашу программу, а сделать с помощью WPF те же программы, которые написали с консолью. И освойтё MVVM.
    Ответ написан
  • Почему в с++ не могут избавиться от переполнения буфера?

    Jump
    @Jump
    Системный администратор со стажем.
    почему не могут избавиться от strcpy?
    Ну наверное по той же причине, по которой на кухне до сих пор не могут избавиться от ножа.

    Нож штука очень небезопасная, но ее продолжают использовать на кухне, не смотря на то, что куча народу ежегодно устраняется кухонными ножами.
    Ответ написан
  • Почему нельзя присвоить новое значение переменной в классе?

    zagayevskiy
    @zagayevskiy
    Android developer at Yandex
    Потому что код нельзя писать внутри класса вне методов и секций инициализации.
    Ответ написан
  • Почему не работает код (c)?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Потому что у вас в условиях не сравнения (==), а присвоения (=).
    Используйте стиль Йоды.
    Ответ написан
  • Почему не работает код (c)?

    @Mercury13
    Программист на «си с крестами» и не только
    https://ru.wikipedia.org/wiki/Условия_Йоды
    Аж в двух местах.

    Причём в Си не нужно ставить в сложных условиях скобки, как в Паскале, вполне покатит такое…
    if ((a >= 11 && a <= 14) || m == 0 || (m >= 5 && m <= 9))

    Но нет, вы наставили лишних скобок и заглушили ошибку.

    Также, что мне не нравится.
    Вместо 0,1,2,3 лучше использовать константы MANY/FEW/ONE/UNKNOWN.

    В case 1 символ подстановки плохо содран с доски.

    Если условие на MANY самое сложное и выполняется по остаточному принципу — почему его делаем самым первым? Лучше что-то типа…
    • 10…20 → MANY
    • 1 → ONE
    • 2…4 → FEW
    • Иначе MANY
    Ответ написан
  • Как во все объекты добавить переменную?

    EreminD
    @EreminD
    Кое-что умею
    Ну вы делаете класс Walker. Добавляете ему protected bool canWalk {get;set;}
    А потом, все ваши классы наследуются от Walker
    Ответ написан
  • C vs C++. И вообще стоит ли?

    Yoricrayn
    @Yoricrayn
    Сектант 1-го уровня
    Я не самый крутой программист, но попытаюсь внести какой-то вклад.

    На чистом C игры обычно не пишут, т.к. C++ для этого удобней и мощнее, да и прикладное ПО писать на нём более удобно, но за это приходится платить сложностью языка, намучаешься с которым довольно сильно. Для MUD игр достаточно будет Java, т.к. будет полегче C++ и по моему мнению сокеты писать удобнее, нежели в Python, а клиент-серверные приложения используют не один язык, и зачастую тем языком, который обеспечивает связь клиент-сервер является как-раз Java. Есть хорошая книжка по ней, из серии Head First, в русском переводе вроде называлась "Изучаем Java", авторы Кэти Сьерра и Берт Бэйтс, легко читается и воспринимается и даёт основные знания по Java, в т.ч. веб-сокеты там тоже затрагиваются и объясняются понятным языком. Прикладное ПО же пишется в основном на C++ и C#, на остальном не особо удобно. По C# кстати тоже есть книжка из той серии, там вроде тоже про сокеты есть. Вообще эти языки отчасти похожи, так что зная один можно легко перейти на другой.
    Ответ написан
  • Как не стать тупым в общении, профессионально занимаясь программированием?

    nki
    @nki
    Автоматизация бизнес-процессов.
    Есть ли у вас подобные проблемы и как вы с ними боретесь?

    Таких проблем нет. Вы работаете 24/7? Если нет, то у вас масса времени на социализацию. Найдите занятие не связанное с программированием и подразумевающим социализацию. Хороший вариант - заняться каким-либо спортом, лучше командным. Например, я занимаюсь бегом по пересеченной местности. Постоянно тренировки, выезды с командой на различные соревнования и пр. Сами не заметите, как станете более комуникабельным человеком.
    Просто не заморачивайтесь на работе, живите яркой жизнью.
    Ответ написан
  • В каких случаях пишут на C вместо C++?

    Nipheris
    @Nipheris Куратор тега C++
    Допустим есть команда профессиональных, финансово-неограниченных, C/C++ программистов, которые предпочитают писать на C++, но были вынуждены выбрать язык C для решения следующих задач....что это за задачи и почему?

    1. Низкоуровневые задачи, где нужно иметь минимум абстракции от оборудования. Я лично хоть и не разделяю анти-C++ настроений Линуса, вполне согласен с тем что ядру полезно быть написанным на Си. В C++ есть довольно много абстракций, влияющих на исполнение кода, есть некоторые вещи "под капотом", которые могут быть недопустимы в низкоуровенвом коде.

    2. Большие проекты, где сложно форсировать code-style. С++ - это такой язык... Он настолько разнообразен, что прежде чем некая команда сядет писать код, она должна выбрать некоторое ПОДМНОЖЕСТВО языка, и использовать его. Иными словами, Плюсы - это большой ящик с инструментами, и вовсе не обязательно (даже вредно) использовать сразу все. Важно отказываться от каких-либо возможностей или практик, особенно устаревших (а таких в C++ немало, "идиоматический" код на C++03 и C++17 - очень разный). Кто не хочет со всем этим заморачиваться (вспомним опять таки Линух - огромный проект с огромным числом участников) - вполне могут выбрать Си. Ведь можно считать, что выбор языка Си - это выбор только необходимого инструментария из того что предлагается в C++ (только помните что сейчас это всё-таки разные языки).

    3. Программирование в сильных ресурсных ограничениях. Например под микроконтроллеры. Хоть в С++ программист "не платит за то чем не пользуется", иногда стандартные реализации различных механизмов недопустимо тяжелы или неэффективны. Например, если у вас очень медленный чип или мало памяти, возможно вы заходите свою собственную реализацию полиморфизма. Какой тогда смысл говорить что вы пишете на C++, если не сможете использовать его механизмы и то, что предлагает компилятор.
    Ответ написан