Вивчення кожного типу мови програмування


24

Я не раз чув, що кожен програміст повинен вивчити один із мов кожного типу. Зараз це не обов’язково правда, але я вважаю, що це гарна ідея.

Я дізнався , процедурний мову (Perl), але то , що є інші типи?

У чому полягають відмінності між ними та які приклади кожного?


8
Вам слід пам’ятати, що існує безліч способів категоризації мов, що перетинаються. Найпоширеніша - це програмування парадигми, але навіть тоді існують основні та незначні відмінності, багато повністю відокремленої осі, і багато мов потрапляють у кілька парадигм.

1
Я забув би про категорії - якщо ви дійсно зацікавлені в навчанні з мови, я б запропонував і Лісп, і Скалу, якщо ви можете впоратися з тими двома, які ви накрили багато.
Білл К

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

Відповіді:


34

Хоча термінологія далеко не стандартизована, загальний спосіб класифікувати основні парадигми програмування

  • Процедурний
  • Функціональний
  • Логічні
  • Об'єктно-орієнтована
  • Родовий

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

У функціональних мовах функції розглядаються як об'єкти першокласного рівня. Іншими словами, ви можете передати функцію як аргумент іншій функції, або функція може повернути іншу функцію. Функціональна парадигма ґрунтується на обчисленні лямбда, а приклади функціональних мов - LISP, Scheme та Haskel. Цікаво, що JavaScript також підтримує функціональне програмування.

У логічному програмуванні ви визначаєте предикати, які описують відносини між сутностями, такими як president(Obama, USA)або president(Medvedev, Russia). Ці предикати можуть бути дуже складними і включати змінні, а не лише буквальні значення. Після того, як ви вказали всі свої предикати, ви можете задавати питання вашої системи та отримувати логічно послідовні відповіді.

Велика ідея логічного програмування полягає в тому, що замість того, щоб розповідати комп’ютеру, як обчислювати речі, ви розповідаєте, що це таке . Приклад: PROLOG.

Об'єктно-орієнтована парадигма є певним чином розширенням процедурного програмування. У процедурному програмуванні ви маєте свої дані, які можуть бути примітивними типами, такими як цілі числа та поплавці, типи сполук, як масиви чи списки, а також визначені користувачем типи, як структури. Ви також маєте свої процедури, які працюють на даних. Навпаки, в ОО є об'єкти, до яких відносяться як дані, так і процедури. Це дозволяє вам мати такі приємні речі, як капсулювання, успадкування та поліморфізм. Приклади: 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. Логіка: наприклад, Prolog.
Jetti

2
І нульовий тип - це C;)
yati sagade

Справжнє питання полягає в тому, скільки з них потрібно розробнику, щоб ефективно кодувати більшість проблем програмування.
JeffO

0

Prolog - це мова логічного програмування і розпочати її відносно просто. Це вимагає зовсім іншого мислення, ніж процедурне програмування, тому добре вивчити, коли ви намагаєтесь розтягнути свій мозок.

Якщо ви вступаєте до коледжу, ви повинні пройти курс з мов програмування, оскільки він орієнтований на впровадження різних типів мов програмування та для чого вони найкраще використовуються.


0

Більшість основних мов поєднують аспекти імперативного, функціонального та декларативного програмування. Нішеві мови, як правило, більш екзотичні або пропонують цікаві нові ідеї, які з тих чи інших причин не підходять для програмування загального призначення. Деякі, аж ніяк не вичерпні, приклади:

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