Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 1 из 1
  1. #1
    Аватар для Tracker1
    Проверенный

    Статус
    Оффлайн
    Регистрация
    30.07.2013
    Сообщений
    54
    Репутация:
    84 ±

    [Цикл уроков программиста] 3. С++ Vs. Delphi

    Знающие люди советуют новичкам учить Pascal или Delphi (ранее известный под кодовым именем Object Pascal), а не C++. Основной тезис в пользу выбора Delphi звучит так:

    C++ сложнее чем Delphi.
    или
    С++ сложнее чем Pascal.

    Почитатели богомерзкого Delphi сумели внушить эту ложную мысль тысячам начинающих программистов.

    После того как наивный новичок поддался на их уговоры, культисты Delphi совращают его всякими непотребствами: визуальным программированием и библиотеками VCL и CLX. Судьба программиста, выбравшего тёмную сторону силы, ужасна: в скором времени ему предстоит написать текстовый редактор, используя компоненты TMemo, TPopupMenu, TMainMenu. В процессе работы над редактором наступают необратимые нарушения в психике. Но это только начало! Выбравшему Delphi предстоит сделать невозможное для пользователя C++ - написать браузер, используя компонент TWebBrowser. Теперь новоявленный разработчик превращается в пропагандистскую машину, готовую уничтожить любого, кто заикнётся, что C++ не сложнее Паскаля.

    Ну а теперь серьёзно:

    Чтобы понять, действительно ли C++ сложнее Delphi, достаточно рассмотреть базовые возможности языков программирования. Ведь именно над изучением этих возможностей первое время будет корпеть начинающий программист.

    Цель данной статьи посредством простых примеров опровергнуть совершенно лживое утверждение о сложности C++ по сравнению с Паскалем.

    Создание Windows программы в Delphi за пять минут

    Для начала следует хорошо уяснить следующее: какой бы язык программирования не изучался, первое время придётся работать с простым текстом. Выучить Delphi, начав создавать оконные приложения, очень и очень сложно. Практически все новички после создания пары окон с TEdit и TLabel, переходят к консольным программам.

    Максимум что можно сделать с помощью визуального программирования на первых порах - повторить примеры из учебника. О написании более-менее сложной программы не может идти и речи.

    Delphi и Object pascal

    На данный момент Delphi и Object Pascal - это одно и то же. Раньше было разделение: Delphi - среда разработки (такая же как Visual C++), а Object Pascal - язык программирования (как C++).

    И ещё одно: когда говорят Delphi, имеют ввиду Pascal. И наоборот. В настоящее время это два неразрывно связанных понятия.

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

    Общая структура программ на Delphi и С++

    Программы на любом языке состоят из операторов. Если совсем просто, оператор - это команда процессору выполнить какое-нибудь действие.

    И в C++, и в Паскале (а соответственно и в Delphi) конец оператора обозначается точкой с запятой.

    В обоих языках для комментариев используются символы // - две косых черты. Комментарий - это текст в программе, который не будет выполняться процессором. Теперь посмотрим на общую структуру программы на С++ и Delphi:
    PHP код:
    // программа на С++
    // глобальная область видимости
    int main ()
    {
      
    // код программы - операторы
      
    return 0;

    PHP код:
    // программа на Delphi
    program someProgram;
    // разделы

    begin
      
    // код программы - операторы
    end
    Программа на C++ начинается с глобальной области видимости. Далее идёт строка int main(). После этой строки нужно поставить две фигурные скобки (открывающую и закрывающую). Код программы должен находиться внутри фигурных скобок. Обязательно нужно написать как минимум один оператор - return 0;.

    Программа на Delphi начинается с ключевого слова program, после которого пишется имя программы. Далее идёт список разделов. Код программы должен находиться между ключевыми словами begin и end.

    Тут самое важное: в C++ код находится между фигурных скобок, а в Pascal - между словами begin и end.
    Переменные в Delphi и C++

    Переменные предназначены для хранения и использования данных во время выполнения программы.

    И С++, и Delphi - строго типизированные языки. Это значит, что в этих языках программирования для хранения разных данных используются разные типы переменных. Например, для хранения целого числа используется переменная одного типа, для хранения вещественного - другого.

    Для целых чисел в C++ используется обозначение int, в Delphi - integer. Дробные числа в C++ - float, в Delphi - real.

    В С++ переменные можно объявлять в любом месте программы. Использовать их можно в любом месте, за исключением глобальной области видимости:
    PHP код:
    int a;   // объявление переменной целого типа

    int main ()
    {
      
    2;
      
    float b// объявление переменной вещественного типа
      
    0.5;
      return 
    0;

    Для создания переменной в C++ нужно написать тип и имя переменной.

    В Delphi переменные обязательно должны объявляться в разделе var:
    PHP код:
    program someProgram;
    var
      
    ainteger// объявление переменной целого типа
      
    breal;    // объявление переменной вещественного типа

    begin
      a
    :=2;
      
    b:=0.5;
    end
    Для создания переменной в Delphi необходимо, чтобы её объявление находилось в разделе var. Создание переменной в Delphi выглядит так: имя переменной, двоеточие, имя типа.

    Для присваивания в C++ используется знак =, в Delphi - :=. Операция присваивания берёт то, что находится справа от знака и помещает это в переменную, находящуюся слева от знака присваивания. В обоих наших программах, после выполнения всех операторов, переменная a будет хранить значение 2, а переменная b - 0,5.

    Управляющие структуры: ветвления и циклы на Delphi и C++

    Управляющие структуры - самая важная часть любого языка. Они изучаются практически в самом начале знакомства с языком.

    Управляющие структуры предназначены для управления (кто бы мог подумать) последовательностью выполнения операторов языка.

    Любую программу можно написать, используя три управляющие структуры:


    Следование. Данная управляющая структура говорит, что программа будет выполняться последовательно:
    PHP код:
    a:=3;
    b:=1;
    a:=a+b
    Глядя на этот код, можно с уверенностью сказать, что сначала переменной a будет присвоено значение 3, затем переменной b присвоится значение 1 и в конце переменной a будет присвоено значение 4. Это и называется последовательным выполнением. Т.е. процессор выполняет команды вашей программы сверху вниз одну за другой.


    Выбор. Для выбора во всех языках используются ветвления. Данная управляющая структура позволяет выбрать, какой код будет выполняться, в зависимости от условия.
    PHP код:
    // C++
    if ( 0)
    {
      
    1;
    }
    else
    {
      
    0;

    PHP код:
    // Delphi
    if a>0 then
    begin
      b 
    := 1;
    end
    else
    begin
      b 
    := 0;
    end
    Если переменная a больше нуля, то b присваивается 1, а если переменная a меньше или равна нулю, то b будет равна нулю.

    Как видим, отличия небольшие - использование ключевого слова then в Delphi и обязательные скобочки вокруг условия в C++. Существуют и другие формы ветвлений, но мы их рассматривать не будем.


    Повтор. Для повторов кода используются циклы. Рассмотрим два вида - циклы for и while.
    PHP код:
    // цикл for на Delphi
    b:=0;
    for 
    a:=1 to 10 do
    begin
      b
    := a;
    end
    PHP код:
    // цикл for на C++
    b=0;
    for (
    a=1<= 101)
    {
      
    a;

    Циклы позволяют выполнить группу операторов несколько раз. В данном примере, после окончания цикла, переменная b будет принимать значение 10.

    На C++ цикл for немного сложнее чем на Delphi. В цикле for на C++ нужно указать три параметра: инициализацию счётчика, условие выхода из цикла, изменение счётчика. На Delphi нужно указать только начальное и конечное значение.
    PHP код:
    // цикл while на Delphi
    a:=10;
    while 
    do
    begin
      a 
    := 1;
    end
    PHP код:
    // цикл while на С++
    a=10;
    while (
    0)
    {
      
    1;

    Цикл while на C++ и Delphi почти одинаковый. На Delphi нет скобочек вокруг условия, и присутствует слово do.

    Массивы в Delphi и C++

    Массивы используются, когда требуется создать несколько переменных одного типа.
    PHP код:
    // массивы в Delphi
    program someProgram;
    Var
      
    a: array [1..10of integer// объявление массива

    begin
      a
    [1] := 5// использование массива
    end
    PHP код:
    // массивы в С++
    int main()
    {
      
    int a[10]; // объявление массива 
      
    a[0] = 5;  // использование массива

    Массивы в Delphi объявляются в разделе var. Самое важное отличие: на Delphi элементы массива можно нумеровать с единицы, а на C++ - только с нуля. В остальном, массивы используются одинаково.

    Функции в Delphi и C++

    Функции используются, когда в разных частях программы необходимо выполнить одну группу операторов.
    PHP код:
    // функции в Delphi
    program someProgram;
    var
      
    breal;
      
    creal;

    function 
    someF(areal): real//определение функции
    begin
      someF
    :=a;
    end;

    begin
      c 
    := 5;
      
    := someF(c);
    end
    PHP код:
    // функции в c++
    float b;
    float c;

    float someF (float a)   // определение функции
    {
      return 
    a;
    }

    int main()
    {
      
    5;
      
    someF(c);
      return 
    0;

    Перед названием функции в Delphi указывается ключевое слово function. После круглых скобочек стоит двоеточие и имя типа возвращаемого значения. В C++ имя типа возвращаемого значения стоит перед именем функции.

    Важное отличие: в C++ внутри определения функции используется оператор return, в то время как в Delphi для возвращения значения из функции используется имя этой функции.

    На закуску: О простоте Delphi

    Вам могло показаться, что в начале данной статьи я очерняю (или даже оскорбляю) поклонников Delphi. Уверяю вас это не так. Большнинство из них реально зомбированы!

    Когда я начал писать статью, я хотел дать слово другой стороне. Ну, чтобы поклонники Delphi могли показать действительно простые по сравнению с C++ примеры кода. Для этого, я на одном из форумов попросил привести примеры кода на Delphi, когда в очередной раз была затронута тема C++ vs. Delphi. Мой собеседник не разочаровал:
    PHP код:
    type 
    TLogger 
    = class 
      protected 
      class var 
        
    FLogger TLogger;
      public 
        
    FText TStringList
        
    constructor Create
        
    destructor Destroyoverride
        class 
    operator Implicit(Line String) : TLogger;

      
    strict private 
      class var 
        class 
    constructor Create;
    end

    constructor TLogger.Create
    begin 
      inherited


      
    FText := TStringList.Create
    end

    destructor TLogger.Destroy
    begin 
      FText
    .Free

      
    inherited
    end

    class 
    operator TLogger.Implicit(Line String) : TLogger
    begin 
      FLogger
    .FText.Add(Line); 

      
    Result := FLogger
    end

    class 
    constructor TLogger.Create
    begin 
      FLogger 
    := TLogger.Create
    end
    Я возликовал через пять минут, которые потребовались, чтобы разобраться в коде и оценить его гениальность (и конечно же, простоту). О таком подарке я даже и не мечтал!

    Код в примере выше перегружает оператор присваивания. Вот как этот код будет выглядеть на C++:
    PHP код:
    class TLogger 
    {
    public: 
      list 
    FText;
      
    void operator= (string Line
      { 
        
    FText.push_back(Line);
      } 
    }; 
    Считаем: 9 строк на C++ против тридцати трёх на Delphi!!! А что, на C++ действительно сложнее получилось: видите там фигурные скобки какие-то дурацкие - ничего не разобрать! При этом код на C++ работает всегда, а код на Delphi будет работать только при выполнении определённых условий. При этом, при написании кода на Delphi использовались... ээммм... так сказать, не слишком известные особенности языка.

    Я тут же спросил своего собеседника, действельно ли он считает, что код, который привёл он, проще и понятнее моего. На что оппонент, не моргнув глазом, ответил, что да, проще. Я же говорю, это страшные люди!

    Вот такой вот коленкор.
    Какой язык выбрать: C++ или Object Pascal, Delphi?

    Те возможности, которые рассматривались выше, присущи любому языку программирования. Повторяю, любому! Какой бы язык вы не выбрали для изучения, первое время вы будете осваивать следующее: использование переменных, циклы, ветвления, массивы, функции. Это самые важные вещи, без которых программирование вообще немыслимо.

    На начальном этапе разницу в сложности вы просто не заметите! Собственно, её и нет. Нужно быть психбольным, чтобы утверждать, что один дополнительный параметр в цикле for делает изучение C++ в разы сложнее.

    Тут важный момент! Нужен хороший учебник. Я вот уже писал про книгу "Язык программирования C++". Если вы хотите забросить изучение C++ через пару часов после начала, лучшей книги вы не найдёте.

    Кто говорит, что C++ сложнее Delphi, тот или не знает о чём он говорит, или лжёт. Можно с полной уверенностью утверждать, что сложность у них (как минимум) одинаковая. Думаю, мне удалось это показать на примитивных примерах.

    В статье не были затронуты ещё две важные темы, с которыми придётся столкнуться новичкам: указатели и классы. Но там такая же ситуация - отличия минимальны.

  2. 2 пользователя(ей) сказали cпасибо:
    Desulaid (16.02.2018) vovandolg (13.10.2016)
 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •