Javascript có phải là ngôn ngữ chức năng không? Tôi biết nó có các đối tượng và bạn cũng có thể thực hiện OOP với nó, nhưng nó cũng là một ngôn ngữ chức năng, nó có thể được sử dụng theo cách đó không?
Đôi khi, mọi người sẽ nói lập trình chức năng, khi ý nghĩa của chúng là lập trình bắt buộc hoặc lập trình thủ tục . Nói đúng ra, lập trình chức năng là:
Trong khoa học máy tính, lập trình chức năng là một mô hình lập trình coi việc tính toán như là sự đánh giá các hàm toán học và tránh trạng thái và dữ liệu đột biến . Nó nhấn mạnh việc áp dụng các chức năng, trái ngược với phong cách lập trình mệnh lệnh, trong đó nhấn mạnh đến những thay đổi về trạng thái. Lập trình hàm có nguồn gốc từ phép tính lambda, một hệ thống chính thức được phát triển vào những năm 1930 để nghiên cứu định nghĩa hàm, ứng dụng hàm và đệ quy. Nhiều ngôn ngữ lập trình chức năng có thể được xem như là công phu trên phép tính lambda.
Mặc dù Javascript không được biết đến rộng rãi hoặc được sử dụng như một ngôn ngữ chức năng, nhưng nó có một số yếu tố chức năng :
JavaScript có nhiều điểm chung với Scheme. Đó là một ngôn ngữ năng động. Nó có một kiểu dữ liệu linh hoạt (mảng) có thể dễ dàng mô phỏng các biểu thức s. Và quan trọng nhất, chức năng là lambdas.
Scheme là một phương ngữ của Lisp , và có lẽ là một trong những ngôn ngữ mà hầu hết các lập trình viên nghĩ đến khi họ thảo luận về lập trình chức năng. Khi nói đến hướng đối tượng , Javascript là ngôn ngữ hướng đối tượng. Nhưng định hướng đối tượng của nó là nguyên mẫu dựa trên :
Lập trình dựa trên nguyên mẫu là một kiểu lập trình hướng đối tượng, trong đó các lớp không có mặt và việc tái sử dụng hành vi (được gọi là kế thừa trong các ngôn ngữ dựa trên lớp) được thực hiện thông qua quá trình nhân bản các đối tượng hiện có làm nguyên mẫu. Mô hình này cũng có thể được gọi là lập trình không phân lớp, hướng mẫu hoặc dựa trên cá thể. Delegation là tính năng ngôn ngữ hỗ trợ lập trình dựa trên nguyên mẫu.
Vì vậy, mặc dù Javascript hướng đối tượng, nhưng nó không tuân theo mô hình dựa trên lớp phổ biến hơn , cũng như các ngôn ngữ như C ++, C #, Java và PHP (và khá nhiều ngôn ngữ khác). Và tất nhiên đó cũng là một ngôn ngữ bắt buộc, dẫn đến sự nhầm lẫn với lập trình chức năng mà tôi đã mô tả ở trên.
Bạn biết làm thế nào OOP trở thành / dường như là sự phát triển tiếp theo trong lập trình, điều đó có nghĩa là 'Lập trình chức năng' là sự tiến hóa tiếp theo
Định hướng đối tượng và lập trình chức năng chỉ là hai trong số nhiều mô hình lập trình khác nhau , chúng là các phong cách lập trình khác nhau với các khái niệm và trừu tượng khác nhau. Từ khóa là "khác nhau". Không có một mô hình nào tốt hơn các mô hình khác hoặc phát triển hơn các mô hình khác, mỗi mô hình đều phù hợp với một số tình huống tốt hơn các kịch bản khác. Một số có thể khá già về nguồn gốc so với những người khác, nhưng về mặt tiến hóa làm cho chúng tốt hơn, vì chúng đã tồn tại lâu hơn. Nhưng đó không phải là một cách nhìn rất thông minh.
Javascript, như tôi đã mô tả ở trên và cũng như một vài ngôn ngữ khác, là đa mô hình. Nó cho phép bạn viết mã theo kiểu bắt buộc, dựa trên nguyên mẫu và hướng đối tượng. Tùy thuộc vào bạn để chọn cái nào phù hợp nhất với bất cứ thứ gì bạn đang xây dựng. Ngoài ra còn có một số ngôn ngữ mô hình duy nhất, ví dụ kinh điển là Java, chỉ cho phép lập trình hướng đối tượng dựa trên lớp 1 .
Bạn nên thực sự chống lại bất kỳ sự thôi thúc nào để coi ngôn ngữ & mô thức là tuyên bố thời trang. Có một sự dè bỉu ngoài kia, chủ yếu được viết bởi các fanboys / fangirl hoặc những người tiếp thị, với rất ít kiến thức (nếu có) và hiểu biết về lập trình. Các thuật ngữ như "tốt hơn", "phát triển hơn", v.v., đơn giản là không áp dụng.
Tôi học tốt nhất qua các ví dụ, có thể ai đó có thể hiển thị thực hiện cùng một nhiệm vụ theo cách OOP và sau đó theo cách Lập trình chức năng để bản thân tôi hiểu và so sánh những gì lập trình chức năng thực hiện / là gì.
Đó sẽ là một cách khủng khiếp để học hỏi. Định hướng chức năng và đối tượng là các phong cách khá khác nhau, và bất kỳ ví dụ nào ngoài những kiểu đơn giản khủng khiếp sẽ không phù hợp với một hoặc một phong cách khác.
1 Nhưng gần đây cố gắng mở rộng phạm vi của nó sang lập trình chung, hãy xem điều đó diễn ra như thế nào.
Cuối cùng:
- Tập trung vào việc học Javascript, đây là một ngôn ngữ hữu ích và cực kỳ hữu ích. Học ngôn ngữ, không cường điệu.
- Khá nhiều mô hình khác nhau, tất cả đều hữu ích như nhau. Tùy thuộc vào bạn để chọn cái nào bạn thích và cái nào phù hợp nhất với bất cứ thứ gì bạn đang xây dựng.
- Nếu bạn muốn học lập trình chức năng, hãy chọn một ngôn ngữ phù hợp hơn, như Scheme hoặc Clojure . Nhưng trước tiên bạn sẽ cần hiểu các khái niệm toán học liên quan.
- Làm một số nghiên cứu trước khi bạn yêu cầu. Hầu hết các câu hỏi của bạn được trả lời bởi các bài viết Wikipedia có liên quan. Biết cách nghiên cứu và cách hỏi là một kỹ năng cực kỳ quan trọng đối với bất kỳ lập trình viên nào.