Изучение каждого типа языка программирования


24

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

Я узнал , процедурный язык (Perl), но то , что есть другие типы?

Каковы различия между ними и каковы некоторые примеры каждого?


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

1
Я бы забыл о категориях - если вы действительно заинтересованы в изучении языка, я бы посоветовал и Lisp, и Scala, если вы можете справиться с этими двумя, которые вы уже изучили.
Билл К

3
Совет Питера Норвига : изучайте как минимум полдюжины языков программирования. Включите один язык, который поддерживает абстракции классов (например, Java или C ++), один, который поддерживает функциональную абстракцию (например, Lisp или ML), один, который поддерживает синтаксическую абстракцию (например, Lisp), один, который поддерживает декларативные спецификации (например, шаблоны Prolog или C ++), один который поддерживает сопрограммы (например, Icon или Scheme), и тот, который поддерживает параллелизм (например, Sisal).
legends2k

Ответы:


34

Несмотря на то, что терминология далека от стандартизированной, общий способ классифицировать основные парадигмы программирования на

  • процедурный
  • функциональная
  • логический
  • Объектно-ориентированный
  • общий

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

В функциональных языках функции рассматриваются как первоклассные объекты. Другими словами, вы можете передать функцию в качестве аргумента другой функции, или функция может вернуть другую функцию. Функциональная парадигма основана на лямбда-исчислении, и примерами функциональных языков являются LISP, Scheme и Haskel. Интересно, что JavaScript также поддерживает функциональное программирование.

В логическом программировании вы определяете предикаты, которые описывают отношения между сущностями, такие какpresident(Obama, USA) или president(Medvedev, Russia). Эти предикаты могут быть очень сложными и включать переменные, а не только литеральные значения. После того, как вы определили все свои предикаты, вы можете задавать вопросы своей системы и получать логически непротиворечивые ответы.

Основная идея в логическом программировании состоит в том, что вместо того, чтобы сообщать компьютеру, как вычислять вещи, вы говорите ему, что . Пример: ПРОЛОГ.

Объектно-ориентированный парадигма в некотором смысле является расширением процедурного программирования. В процедурном программировании у вас есть ваши данные, которые могут быть примитивными типами, такими как целые числа и числа с плавающей запятой, составными типами, такими как массивы или списки, и пользовательскими типами, такими как структуры. У вас также есть свои процедуры, которые работают с данными. Напротив, в ОО есть объекты, которые включают как данные, так и процедуры. Это позволяет вам иметь хорошие вещи, такие как инкапсуляция, наследование и полиморфизм. Примеры: Smalltalk, C ++, Java, C #.

Общее программирование было впервые введено в Аде в 1983 году и стало широко распространенным после введения шаблонов в C ++. Это идея, что вы можете написать код без указания реальных типов данных, с которыми он работает, и заставить компилятор выяснить это. Например, вместо того, чтобы писать

void swap(int, int);
void swap(float, float);
....

ты бы написал

void swap(T, T);

один раз, и пусть компилятор сгенерирует определенный код для того, что Tможет быть, когда swap()фактически используется в коде.

Общее программирование поддерживается в различной степени C ++, Java и C #.

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


2
К какой категории относится SQL?
Кирк Куйкендалл

@KirkKuykendall SQL будет специализированным или «маленьким» языком.
Кевин Лаккумент

17
SQL является декларативным языком. Вы говорите, что хотите, он выясняет, как его получить. («Логические» языки, такие как Prolog, представляют собой другое подмножество декларативных языков)
Izkata

3
Можем ли мы получить описание процедурного, чтобы сделать ответ более полным?
deworde

3
@Dima Хорошее резюме. Тем не менее, сравнительно небольшая мелочь: «универсальное программирование» появилось не благодаря использованию шаблонов в C ++, а также очень часто используется в функциональных языках, таких как Haskell.
Андрес Ф.

11

Языки программирования имеют ряд в основном ортогональных особенностей; самый выдающийся лежит в парадигме или парадигмах, которые они поддерживают. Википедии статья охватывает парадигм исчерпывающе; Наиболее важные парадигмы, вероятно, следующие:

  • Процедурный / структурированный
  • функциональная
  • Объектно-ориентированный
  • Событийный и аспектно-ориентированный
  • общий
  • логика

Но языки отличаются и другими способами:

  • Система типирования (динамическая и статическая типизация, сильные и слабые типы)
  • Процесс сборки и среда выполнения (интерпретируемая, скомпилированная с помощью байт-кода, полностью скомпилированная)
  • Управление памятью (ручное, как C / C ++, обязательный автоматический сбор мусора, как Java, необязательный GC, как D, ...)
  • Дисциплина оценки (стремление против ленивых; по умолчанию большинство языков стремятся, но многие предоставляют ленивые конструкции)
  • Правила области видимости (сравните, как работает область действия в PHP, Javascript и C, трех языках, которые в остальном очень похожи с точки зрения синтаксиса)

2

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

  • Объектно-ориентированный - VB.NET, C #, Java попадают в эту категорию. Код организован вокруг объектов, которые имеют поведение и связанные данные и которые обмениваются данными друг с другом посредством передачи сообщений.
  • Функциональные - Хаскель, Схема, Лисп и F # попадают в эту категорию. Чистые функции, которые не имеют побочных эффектов. Думайте функции как в математике. Часто можно расширить сам язык через его конструкции.

Это единственные другие типы?
Динамичный

@ perl.j - Нет, но это основные, которые широко используются в наши дни. Смотрите википедию - парадигма программирования .
Одед

@ perl.j также существует на основе стека: например, Forth и Postscript. Логика: такая как Пролог.
Джетти

2
И нулевым типом является C;)
Yati Sagade

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

0

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

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


0

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

  • Языки электронных таблиц (Excel, Google Forms): предназначены для обработки табличных данных.
  • Языки массивов (APL, J): предназначены для быстрой обработки многомерных массивов. В J (+/ % #)&.:*:вычисляет среднеквадратичное значение массива. Известен тем, что он лаконичен, известен тем, что нечитаем.
  • Языки автоматизации (AutoHotkey, Bash): предназначены для упрощения общих задач, таких как заполнение форм, загрузка файлов и т. Д.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.