Học từng loại ngôn ngữ lập trình


24

Tôi đã nghe nhiều lần rằng mọi lập trình viên nên học một trong từng loại ngôn ngữ. Bây giờ, điều này không nhất thiết là đúng, nhưng tôi tin rằng đó là một ý tưởng tốt.

Tôi đã học được một ngôn ngữ thủ tục (Perl), nhưng những gì các loại khác?

Sự khác biệt giữa chúng và một số ví dụ của mỗi là gì?


8
Bạn nên lưu ý rằng có vô số cách chồng chéo để phân loại ngôn ngữ. Phổ biến nhất là theo mô hình lập trình, nhưng ngay cả sau đó có sự khác biệt lớn và nhỏ, nhiều trục hoàn toàn tách biệt và nhiều ngôn ngữ rơi vào một số mô hình.

1
Tôi sẽ quên các danh mục - nếu bạn thực sự thích học từ một ngôn ngữ tôi sẽ đề xuất cả Lisp và Scala, nếu bạn có thể xử lý hai loại đó bạn đã đề cập rất nhiều.
Bill K

3
Lời khuyên của Peter Norvig : Học ít nhất nửa tá ngôn ngữ lập trình. Bao gồm một ngôn ngữ hỗ trợ trừu tượng lớp (như Java hoặc C ++), một ngôn ngữ hỗ trợ trừu tượng hóa chức năng (như Lisp hoặc ML), một ngôn ngữ hỗ trợ trừu tượng cú pháp (như Lisp), một ngôn ngữ hỗ trợ các đặc tả khai báo (như các mẫu Prolog hoặc C ++), một ngôn ngữ có hỗ trợ coroutines (như Icon hoặc Scheme) và một hỗ trợ song song (như Salu).
huyền thoại2k

Câu trả lời:


34

Mặc dù thuật ngữ không được chuẩn hóa, một cách phổ biến là phân loại các mô hình lập trình chính thành

  • Thủ tục
  • Chức năng
  • Hợp lý
  • Hướng đối tượng
  • Chung

Bạn dường như đã biết lập trình thủ tục là như thế nào.

Trong các ngôn ngữ chức năng, các hàm được coi là các đối tượng hạng nhất. Nói cách khác, bạn có thể truyền một hàm làm đối số cho hàm khác hoặc một hàm có thể trả về hàm khác. Mô hình chức năng dựa trên tính toán lambda và các ví dụ về ngôn ngữ chức năng là LISP, Scheme và Haskel. Thật thú vị, JavaScript cũng hỗ trợ lập trình chức năng.

Trong lập trình logic, bạn xác định các vị từ mô tả mối quan hệ giữa các thực thể, chẳng hạn như president(Obama, USA)hoặc president(Medvedev, Russia). Các vị từ này có thể trở nên rất phức tạp và liên quan đến các biến, không chỉ các giá trị theo nghĩa đen. Khi bạn đã chỉ định tất cả các vị từ của mình, bạn có thể đặt câu hỏi cho hệ thống của mình và nhận câu trả lời thống nhất về mặt logic.

Ý tưởng lớn trong lập trình logic là thay vì nói cho máy tính biết cách tính toán mọi thứ, bạn nói với nó những thứ đó là gì. Ví dụ: PRITAL.

Mô hình hướng đối tượng theo một số cách là một phần mở rộng của lập trình thủ tục. Trong lập trình thủ tục, bạn có dữ liệu của mình, có thể là các kiểu nguyên thủy, như số nguyên và số float, kiểu ghép, như mảng hoặc danh sách và kiểu do người dùng xác định, như cấu trúc. Bạn cũng có các thủ tục của bạn, hoạt động trên dữ liệu. Ngược lại, trong OO bạn có các đối tượng, bao gồm cả dữ liệu và thủ tục. Điều này cho phép bạn có những thứ tốt đẹp như đóng gói, kế thừa và đa hình. Ví dụ: Smalltalk, C ++, Java, C #.

Lập trình chung được giới thiệu lần đầu tiên trong Ada vào năm 1983 và trở nên phổ biến sau khi giới thiệu các mẫu trong C ++. Đây là ý tưởng mà bạn có thể viết mã mà không chỉ định các kiểu dữ liệu thực tế mà nó hoạt động và có trình biên dịch tìm ra nó. Ví dụ thay vì viết

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

bạn sẽ viết

void swap(T, T);

một lần, và trình biên dịch tạo mã cụ thể cho bất cứ điều gì Tcó thể, khi swap()thực sự được sử dụng trong mã.

Lập trình chung được hỗ trợ ở các mức độ khác nhau theo C ++, Java và C #.

Điều quan trọng cần lưu ý là nhiều ngôn ngữ, như C ++, hỗ trợ nhiều mô hình. Cũng đúng là ngay cả khi một ngôn ngữ được cho là hỗ trợ cho một mô hình cụ thể, nó có thể không hỗ trợ tất cả các tính năng của mô hình. Chưa kể rằng có rất nhiều sự bất đồng về việc các tính năng được yêu cầu cho một mô hình cụ thể.


2
SQL sẽ thuộc loại nào?
Kirk Kuykendall

@KirkKuykendall SQL sẽ là một chuyên gia, hoặc "ít", ngôn ngữ.
Kevin Lacquement

17
SQL là một ngôn ngữ khai báo. Bạn nói với nó những gì bạn muốn, nó tìm ra cách để có được nó. (Các ngôn ngữ "logic" như Prolog là một tập hợp con khác của các ngôn ngữ Tuyên bố)
Izkata

3
Chúng tôi có thể có một mô tả về thủ tục, để làm cho câu trả lời đầy đủ hơn?
deworde

3
@Dima Tóm tắt tốt đẹp. Tuy nhiên, một nitlog tương đối nhỏ: "lập trình chung" không xuất phát từ việc sử dụng các mẫu trong C ++ và cũng được sử dụng rất thường xuyên trong các ngôn ngữ chức năng như Haskell.
Andres F.

11

Ngôn ngữ lập trình có một số tính năng chủ yếu là trực giao; điểm nổi bật nhất nằm ở mô hình hoặc mô hình mà họ hỗ trợ. Các bài viết trên wikipedia bao gồm các mô hình một cách triệt để; các mô hình quan trọng nhất có lẽ là:

  • Thủ tục / Cấu trúc
  • Chức năng
  • Hướng đối tượng
  • Hướng sự kiện và hướng đến khía cạnh
  • Chung
  • Logic

Nhưng ngôn ngữ cũng khác nhau theo những cách khác:

  • Hệ thống gõ (kiểu động so với kiểu gõ tĩnh và kiểu mạnh so với kiểu yếu)
  • Xây dựng quy trình và môi trường thời gian chạy (được giải thích, biên dịch mã byte, biên dịch đầy đủ)
  • Quản lý bộ nhớ (thủ công như C / C ++, thu gom rác tự động bắt buộc như Java, tùy chọn GC như D, ...)
  • Kỷ luật đánh giá (háo hức so với lười biếng; hầu hết các ngôn ngữ đều háo hức theo mặc định, nhưng nhiều ngôn ngữ cung cấp các cấu trúc lười biếng)
  • Quy tắc phạm vi (so sánh cách phạm vi hoạt động trong PHP, Javascript và C, ba ngôn ngữ khá khác nhau về mặt cú pháp)

2

Có một số mô hình lập trình khác nhau hiện đang thịnh hành:

  • Hướng đối tượng - VB.NET, C #, Java thuộc loại này. Mã được sắp xếp xung quanh các đối tượng có hành vi và dữ liệu liên quan và giao tiếp với nhau bằng cách gửi tin nhắn.
  • Chức năng - Haskel, Scheme, Lisp và F # thuộc loại này. Các chức năng thuần túy không có tác dụng phụ. Hãy suy nghĩ các chức năng như trong toán học. Thông thường người ta có thể mở rộng ngôn ngữ thông qua các cấu trúc của nó.

Đây có phải là những loại khác?
Động

@ perl.j - Không, nhưng đây là những cái chính được sử dụng rộng rãi trong những ngày này. Xem wikipedia - Mô hình lập trình .
Oded

@ perl.j cũng có dựa trên Stack: chẳng hạn như Forth và POSTcript. Logic: như Prolog.
Jetti

2
Và loại zeroth là C;)
yati sagade

Câu hỏi thực sự là có bao nhiêu trong số này mà một nhà phát triển cần mã hóa hiệu quả hầu hết các vấn đề lập trình.
JeffO

0

Prolog là một ngôn ngữ lập trình logic và tương đối dễ dàng để bắt đầu. Nó đòi hỏi một tư duy hoàn toàn khác so với lập trình thủ tục, do đó, rất tốt để khám phá khi bạn đang cố gắng kéo dài bộ não của mình.

Nếu bạn học đại học, bạn nên tham gia một khóa học về Ngôn ngữ lập trình vì nó hướng đến việc giới thiệu các loại ngôn ngữ lập trình khác nhau và chúng được sử dụng tốt nhất cho mục đích gì.


0

Hầu hết các ngôn ngữ chính trộn lẫn các khía cạnh của lập trình mệnh lệnh, chức năng và khai báo. Các ngôn ngữ thích hợp có xu hướng kỳ lạ hơn hoặc giới thiệu những ý tưởng mới thú vị, vì lý do này hay lý do khác, không phù hợp cho lập trình mục đích chung. Một số, không có nghĩa là toàn diện, ví dụ:

  • Ngôn ngữ bảng tính (Excel, Google Forms): Được thiết kế để xử lý dữ liệu dạng bảng.
  • Ngôn ngữ mảng (APL, J): Được thiết kế để xử lý nhanh các mảng đa chiều. Trong J, (+/ % #)&.:*:tính toán RMS của một mảng. Nổi tiếng là súc tích, khét tiếng là không thể đọc được.
  • Ngôn ngữ tự động hóa (AutoHotkey, Bash): Được thiết kế để hợp lý hóa các tác vụ phổ biến, như điền biểu mẫu, tải tệp lên, v.v.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.