C++ и Java являются одними из очень популярных языков программирования. Их можно сопоставлять очень детально, сравнивая скорость, типизацию, компиляторы и т.д, но для обычного обывателя это слишком, и гораздо проще будет рассмотреть их отличия на общем, базовом уровне, чтобы выводы для себя мог сделать даже человек, далёкий от программирования и только присматривающийся к данной сфере. Уже на этом этапе можно сделать вывод, язык какой парадигмы вам подойдёт. И да, ситуация такого выбора вполне реальна — например, для студентов в учебных целях.

Для этого попытаюсь рассмотреть вкратце основные конструкции языков программирования а именно:

выражения: математические, логические, строковые;
операторы: составной оператор, оператор присваивания, условный оператор IF, циклы FOR и WHILE, оператор GOTO и другие;
подпрограммы: процедуры и функции;
типы данных: базовые типы, структуры, классы, интерфейсы и шаблоны.

(данная статья является не переводом, а моим личным анализом собранной информации)

Выражения


Java


Математические выражения


Математическое выражение – выражение, результатом которого является число. В их состав входят переменные, функции и константы.

Арифметические операторы в Java позволяют проводить стандартные математические операции сложения, вычитания, умножения и так далее. Также в языке присутствуют операторы декремента и инкремента (увеличение или уменьшение значения на единицу).

Логические выражения


Логическое выражение — это описание выражения, результатом которого является истина (true) или ложь (false). Логические операторы работают только с операндами типа boolean.
Все логические операторы с двумя операндами объединяют два логических значения, образуя результирующее логическое значения.

Java поддерживает более десяти операторов: AND (логическое и сокращённое), OR (логическое и сокращённое), XOR, NOT и так далее.

Строковые выражения


Строковое выражение — манипуляция со строками. По виду напоминает математическое выражение, но результатом его является новая строка. 

Язык Java позволяет складывать, вычитать, разделять и соединять строки. Отличительной особенностью Java является наличие класса String, предусмотренного специально для работы со строками.

C++ / Visual basic


Математические выражения


В языках C++ и Visual Basic также присутствуют арифметические операторы, операторы декремента и инкремента, синтаксис математических выражений также поддерживает скобки и унарный минус.

Так же, как и в языке Java, у них в качестве встроенных функций доступны более сложные операции, например, квадратный корень sqrt(x) и экспонента exp(x).

Логические выражения


В Visual Basic используется шесть операторов: помимо AND, OR, NOT, XOR также применяются операторы эквивалентности и импликации.

В С++ же используют три логических оператора: AND, NOT и OR. Во всех рассматриваемых языках некоторые из операторов можно использовать сразу для нескольких операндов.

Строковые выражения


В отличие от Java, в C++ отсутствует встроенная поддержка такого объекта, как строка, и при необходимости работы со строками (сложения, вычитания и т.п.) подключают заголовочный файл string.

В Visual Basic, ввиду важности работы со строками, поддерживается тип данных String, представляющий последовательность символов. Переменная этого типа может принимать любое выражение, результатом которого является строка.

Операторы


Java


Все рассматриваемые языки схожи тем, что поддерживают операторы циклов (FOR, WHILE), оператор условия IF, однако существенное различие их в том, что в Java нет оператора перехода «goto» как такового: сохраняются ключевые слова «const» and «goto», однако они не используются.

C++ / Visual basic


C++ и Visual Basic, разработанные гораздо раньше Java, обладают оператором перехода «goto», но использование данного оператора, как правило, нежелательно.

Процедуры и функции


Java


Подпрограмма – именованная, логически законченная группа операторов языка, которую можно вызвать для выполнения любое количество раз из различных мест программы. Функции возвращают основной программе какое-либо значение, процедуры не возвращают.
В Java нет ни процедур ни функций, обе эти сущности называются методами, но они так же могут возвращать или не возвращать значения, могут вызываться с указанием параметров или без.

C++ / Visual basic


В C++ подпрограммы реализованы в виде функций. Программа на С++ состоит из одной или нескольких функций, которые должны быть описаны перед их использованием.
Программы на Visual Basic также состоят из нескольких подпрограмм, которые делятся на процедуры и функции.

Типы данных


Java


В Java для всех базовых числовых типов независимо используются определенные соглашения, не зависящие от конкретной реализации среды, что гарантирует воспроизводимые результаты на широком спектре платформ.Также В Java нет конструкций struct и union, все это объединено в концепции классов.

Помимо этого, Java не поддерживает указатели (pointers) (их роль в Java играют так называемые «ссылки»), шаблоны (templates), перегрузку операторов (operator overloading), структур и т.д.

C++ / Visual basic


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

Из-за зависимости от транслятора на разных платформах поведение кода на С++ и Visual Basic может меняться. С++ же пытается предоставить программисту возможность инкапсуляции данных посредством объявления структур (struct) и полиморфизм с помощью объединений (union). Эти две конструкции прикрывают критические и катастрофические машинно-зависимые ограничения по размеру и выравниванию.

C++ и Visual Basic поддерживают указатели (pointers) и адресную арифметику указателей (pointer arithmetic), перегрузку операторов и т.д.

Итоги


Язык Java был разработан под влиянием языков, существовавших до него, в их числе Visual Basic и особенно С++, что означает, что некоторое количество конструкций данных языков совпадает, однако в Java были исправлены многие недостатки C++, влиявшие на работоспособность и результаты работы программы, а также приняты меры по «упрощению» языка в сравнении с С++, что подразумевает существенное отличие Java от C++. Несмотря на наличие схожих конструкций, Java сильно отличается как от C++, так и от Visual Basic.

P.S. На всякий случай упомяну, что я не ставлю целью дать совет по выбору языка для изучения или лучшего языка из рассматриваемых, а лишь предоставляю пищу для рассуждений. И кстати, а как вы выбирали свой первый язык программирования, что для вас было важно в первую очередь? Или вас в вузе «обязывали» писать на чём-то определённом?

Комментарии (15)


  1. mmMike
    13.12.2019 13:26
    +1

    Visual basic? (RIP)
    Статья привет из начала века…
    Не понял зачем она. Ни о чем.


    1. Sergani
      13.12.2019 17:56

      VBA ещё вас переживет.


  1. yarosroman
    13.12.2019 13:29

    Что за бред я только, что прочитал.


  1. nikbond
    13.12.2019 13:32

    Реквестирую статью «Отличия хрена от пальца на общем уровне».


  1. Matisumi
    13.12.2019 13:46

    C++ и Java являются одними из очень популярных языков программирования. Их можно сопоставлять очень детально, сравнивая скорость, типизацию, компиляторы и т.д


    Ух, сейчас бы сравнивать плюсы с Явой и говорить что плюсы очень популярны!


    1. KanuTaH
      13.12.2019 15:59
      +1

      А почему бы и не говорить? По статистике того же Гитхаба, у Явы ~10-11% (смотря как именно считать, там есть разные метрики — по пулл-реквестам, по пушам, и так далее), у C++ ~7-8%. Не такая уж большая разница, оба языка входят в топ-5.


      1. Matisumi
        14.12.2019 20:22

        Не представляю кто и что сейчас пишет на C++, если мы говорим про реальные проекты.


        1. KanuTaH
          14.12.2019 21:49

          Ну это говорит просто об узости вашего кругозора. Например, браузер, с которого вы написали этот комментарий, наверняка написан на C++.


          1. Matisumi
            15.12.2019 07:46

            Вот об этом я и говорю — браузер наверняка на C++ (хотя я сильно сомневаюсь, что сафари написан на нем). Но браузер — это один проект, а тысячи и тысячи разработчиков пишут всевозможные сервисы, энтерпрайз и прочее на чем угодно, но не на C++. Просто прикиньте процентное соотношение тех же энтерпрайзщиков и тех, кто пишет на плюсах, количество тех и тех проектов — и сразу станет понятно о чем я говорю. Плюсы конечно используются, но гораздо реже дотнета, php или Java


            1. KanuTaH
              15.12.2019 10:59

              Ну так кроме энтерпрайза много ещё всего есть. Embedded всякий, игры, ML (привет, TensorFlow), высокопроизводительные вычисления. Вот эта софтина например:

              inobitec.ru/products/dicomviewer

              написана на C++/Qt, потому что нужна скорость и кроссплатформенность одновременно. А вы как-то в один энтерпрайз уперлись и все. Это профдеформация. Был бы на вашем месте веб-фронтендер — говорил бы «какой ещё дотнет? кругом один Javascript» :)


              1. Matisumi
                15.12.2019 20:00

                Энтерпрайз я для примера привел. Ради интереса посмотрите соотношения вакансий на условный энтерпрайз и вот на embedded и ML на плюсах.


                1. KanuTaH
                  15.12.2019 20:28

                  А уж 1С'ников там сколько… :) Насколько я помню соответствующее исследование от hh (здесь, на хабре) 1С'ники по количеству вакансий обгоняют и питонистов, и дотнетчиков, и яваскриптеров, причём с большим отрывом. Если судить по вакансиям, то и дотнет на фоне 1С как-то не очень популярен, только Java ещё держится :) Но, несмотря на такую «популярность», 1С не заменит дотнет точно так же, как дотнет в соответствующих областях не заменит плюсы. Всему своя ниша.


  1. lovermann
    13.12.2019 13:52

    let EvaluateArticleAboutProgrammingLanguages =
       let atLeastOneRowOfCode:string = "хотя бы одна строчка кода"
       printfn "Почитаем..."
       printfn "Как эта статья вообще может существовать?"
    


  1. DMGarikk
    13.12.2019 15:32

    обладают оператором перехода «goto», но использование данного оператора, как правило, нежелательно.

    однако существенное различие их в том, что в Java нет оператора перехода «goto» как такового


    автор, если ты не понимаешь о чем говоришь, лучше вообще не пиши
    1) в java есть практически полный аналог goto который есть в VB, разве что не имеет отдельного названия
    2) basic в котором был 'тот самый goto' который 'нельзя использовать' — устарел ещё в середине 80х и не применяется более 30 лет, несмотря на то что «ключевое слово существует»


  1. Alexxius
    13.12.2019 22:35

    У меня странные ощущения от статьи. И вопрос — на каком из рассматриваемых 3-х языков (и какой версии) работал автор?
    Основа моего недоумения это то как вообще происходит сравнение — по конструкциям, и то весьма простейшим. Об областях применения каждого из языков не сказано практически ничего. Об ключевых особенностях языков — тоже. Вместо этого идет сравнение конструкций, причем на весьма упрощенном уровне. А ведь там даже схожие вещи могут сильно различаться в реализации и поведении.

    PS: Еще раз перечитал, думал может чего не понял. Блин, да тут же чуть ли не в каждом абзаце ошибки и порой серьезные!