Для этого попытаюсь рассмотреть вкратце основные конструкции языков программирования а именно:
выражения: математические, логические, строковые;
операторы: составной оператор, оператор присваивания, условный оператор 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)
Matisumi
13.12.2019 13:46C++ и Java являются одними из очень популярных языков программирования. Их можно сопоставлять очень детально, сравнивая скорость, типизацию, компиляторы и т.д
Ух, сейчас бы сравнивать плюсы с Явой и говорить что плюсы очень популярны!KanuTaH
13.12.2019 15:59+1А почему бы и не говорить? По статистике того же Гитхаба, у Явы ~10-11% (смотря как именно считать, там есть разные метрики — по пулл-реквестам, по пушам, и так далее), у C++ ~7-8%. Не такая уж большая разница, оба языка входят в топ-5.
Matisumi
14.12.2019 20:22Не представляю кто и что сейчас пишет на C++, если мы говорим про реальные проекты.
KanuTaH
14.12.2019 21:49Ну это говорит просто об узости вашего кругозора. Например, браузер, с которого вы написали этот комментарий, наверняка написан на C++.
Matisumi
15.12.2019 07:46Вот об этом я и говорю — браузер наверняка на C++ (хотя я сильно сомневаюсь, что сафари написан на нем). Но браузер — это один проект, а тысячи и тысячи разработчиков пишут всевозможные сервисы, энтерпрайз и прочее на чем угодно, но не на C++. Просто прикиньте процентное соотношение тех же энтерпрайзщиков и тех, кто пишет на плюсах, количество тех и тех проектов — и сразу станет понятно о чем я говорю. Плюсы конечно используются, но гораздо реже дотнета, php или Java
KanuTaH
15.12.2019 10:59Ну так кроме энтерпрайза много ещё всего есть. Embedded всякий, игры, ML (привет, TensorFlow), высокопроизводительные вычисления. Вот эта софтина например:
inobitec.ru/products/dicomviewer
написана на C++/Qt, потому что нужна скорость и кроссплатформенность одновременно. А вы как-то в один энтерпрайз уперлись и все. Это профдеформация. Был бы на вашем месте веб-фронтендер — говорил бы «какой ещё дотнет? кругом один Javascript» :)Matisumi
15.12.2019 20:00Энтерпрайз я для примера привел. Ради интереса посмотрите соотношения вакансий на условный энтерпрайз и вот на embedded и ML на плюсах.
KanuTaH
15.12.2019 20:28А уж 1С'ников там сколько… :) Насколько я помню соответствующее исследование от hh (здесь, на хабре) 1С'ники по количеству вакансий обгоняют и питонистов, и дотнетчиков, и яваскриптеров, причём с большим отрывом. Если судить по вакансиям, то и дотнет на фоне 1С как-то не очень популярен, только Java ещё держится :) Но, несмотря на такую «популярность», 1С не заменит дотнет точно так же, как дотнет в соответствующих областях не заменит плюсы. Всему своя ниша.
lovermann
13.12.2019 13:52let EvaluateArticleAboutProgrammingLanguages = let atLeastOneRowOfCode:string = "хотя бы одна строчка кода" printfn "Почитаем..." printfn "Как эта статья вообще может существовать?"
DMGarikk
13.12.2019 15:32обладают оператором перехода «goto», но использование данного оператора, как правило, нежелательно.
однако существенное различие их в том, что в Java нет оператора перехода «goto» как такового
автор, если ты не понимаешь о чем говоришь, лучше вообще не пиши
1) в java есть практически полный аналог goto который есть в VB, разве что не имеет отдельного названия
2) basic в котором был 'тот самый goto' который 'нельзя использовать' — устарел ещё в середине 80х и не применяется более 30 лет, несмотря на то что «ключевое слово существует»
Alexxius
13.12.2019 22:35У меня странные ощущения от статьи. И вопрос — на каком из рассматриваемых 3-х языков (и какой версии) работал автор?
Основа моего недоумения это то как вообще происходит сравнение — по конструкциям, и то весьма простейшим. Об областях применения каждого из языков не сказано практически ничего. Об ключевых особенностях языков — тоже. Вместо этого идет сравнение конструкций, причем на весьма упрощенном уровне. А ведь там даже схожие вещи могут сильно различаться в реализации и поведении.
PS: Еще раз перечитал, думал может чего не понял. Блин, да тут же чуть ли не в каждом абзаце ошибки и порой серьезные!
mmMike
Visual basic? (RIP)
Статья привет из начала века…
Не понял зачем она. Ни о чем.
Sergani
VBA ещё вас переживет.