Lập trình chức năng có liên quan đến phát triển web không? [đóng cửa]


88

Gần đây tôi đã thấy rất nhiều về lập trình chức năng và Clojure trông đặc biệt thú vị. Mặc dù tôi 'hiểu' mô tả cơ bản về nó là gì, tôi không thể tìm ra cách tôi sẽ sử dụng nó hàng ngày với tư cách là một nhà phát triển web, nếu tôi có thể. Phần lớn những gì tôi đã đọc tập trung vào khía cạnh toán học của lập trình hàm hơn là các tình huống lập trình điển hình được tìm thấy trong OO thông thường.

Tôi có cầm nhầm đầu que không? Lập trình chức năng hoàn toàn không liên quan đến phát triển web? Nếu không, có bất kỳ ví dụ nào về việc nó được sử dụng 'cho web' không?

Câu trả lời:


31

Một vài ví dụ ngoài ý muốn của tôi:

  • Yahoo! Store được cung cấp bởi Lisp (tên ban đầu là Viaweb trước khi mua lại)
  • Reddit được tạo nguyên mẫu hoàn toàn trong Lisp, mặc dù họ đã chuyển sang Python vào năm 2005
  • Hacker News được viết hoàn toàn bằng Arc (một phương ngữ Lisp)

7
Yahoo! Store đã được viết lại bằng c ++ vài năm trước.
Apg

5
language! = mô hình lập trình.
phkahler

58
Sự lựa chọn kỳ lạ về các ví dụ ... Yahoo! Store được viết bởi Paul Graham, một người ủng hộ Lisp lớn. Ông cũng viết Hacker News, một bản sao của Reddit. Có lẽ, HN đã được viết phần nào để đáp ứng với việc Reddit chuyển từ Lisp sang Python trong khi các thành viên Reddit là một phần của YCombinator: một chương trình tăng tốc được điều hành bởi Paul Graham. Tôi tính đây là MỘT ví dụ, không phải ba.
Brandon Bloom

Cấu hình máy chủ @ShermPendley, thiết lập mạng và truy cập cơ sở dữ liệu cũng là những yếu tố chính trong hiệu suất. Thời gian thực thi tập lệnh của các ứng dụng web thường là một phần nhỏ trong tổng chi phí.
AgmLauncher

62

Lập trình chức năng phù hợp với các ứng dụng web rất tốt. Ứng dụng web nhận một yêu cầu HTTP và tạo ra một kết quả HTML. Đây có thể được coi là một chức năng từ các yêu cầu đến các trang.

So sánh với các ứng dụng dành cho máy tính để bàn, nơi chúng tôi thường có quá trình chạy lâu dài, giao diện người dùng trạng thái và luồng dữ liệu theo một số hướng. Điều này phù hợp hơn với OO quan tâm đến các đối tượng có trạng thái và thông báo đi qua.


20

Tôi không hiểu tại sao lại không - miễn là bạn đang cung cấp HTML tuân theo tiêu chuẩn cho các trình duyệt, họ không quan tâm bạn đã sử dụng gì để tạo ra nó, đó là ngôn ngữ chức năng, ngôn ngữ mệnh lệnh hay những con khỉ được huấn luyện.


20

Lập trình chức năng thuần túy có thể không liên kết tốt với môi trường lập trình web. Nhưng trở ngại chính chỉ là thiếu cơ sở hạ tầng (khuôn khổ và API). Sẽ còn lâu (có lẽ là không bao giờ, thành thật mà nói) trước khi một ngôn ngữ chức năng có môi trường lập trình web phong phú như Java, Python hoặc Ruby.

Điều đó nói rằng, có một số lựa chọn.

Tôi không có bất kỳ kinh nghiệm nào với bất kỳ cái nào trong số này. Có lẽ những người bình luận có thể cân nhắc về những gì hiệu quả với họ.



4

Đối với Clojure, có một công ty khởi nghiệp thú vị (TheDeadline) đã phát triển bằng Clojure và Google App Engine. Họ có một ppt tốt trên Slideshare và một cuộc phỏng vấn trên InfoQ.

Để có một cuộc thảo luận tốt về việc triển khai Clojure với GAE: http://news.ycombinator.com/item?id=1239788

Theo như tôi biết, Clojure có một vài thư viện phát triển web. Compojure Ring Conjure

Hy vọng điều này sẽ giải đáp được một số thắc mắc của bạn =) (Mình cũng mới bắt đầu ..)

Tốt nhất, Ryan


3

Nó không hoàn toàn không liên quan đến phát triển web. Ứng dụng đặt trên máy chủ rất có thể tận dụng các tính năng chức năng như bao đóng, hàm bậc cao, tính bất biến, tính minh bạch tham chiếu ... chẳng hạn, bạn chắc chắn có các bộ sưu tập mà bạn cần chuyển đổi hoặc thao tác theo bất kỳ cách nào. Lập trình hàm giúp ích ở đây, và đó là lý do mà các thành ngữ của nó đang thâm nhập vào các ngôn ngữ chính thống. Các tính năng chức năng trợ giúp về tính ngắn gọn, khả năng kiểm tra, tính song song và chúng cũng có thể cung cấp các giải pháp nguyên bản cho các vấn đề mà bạn sẽ giải quyết bằng các mẫu.

Cập nhật: cũng có các khuôn khổ web cho các ngôn ngữ chức năng. Weblocks cho Common Lisp, Lift cho Scala. Đây là những cái mà tôi đã nghe nói đến, có thể còn nhiều hơn nữa ... tuy nhiên bạn không nhất thiết phải có chức năng thuần túy - ví dụ như Scala không thuần túy và sẽ hoạt động với bất kỳ khung Java nào, bạn vẫn có thể để sử dụng lập trình chức năng cho lớp nghiệp vụ, v.v.


3

Kiểm tra Ur / Web . Nó rất nhanh và hệ thống kiểu tĩnh của nó biết về những thứ như HTML và SQL nên nó có thể đảm bảo tất cả những điều tốt đẹp về bảo mật.


3

Erlang dường như đang được sử dụng nhiều trong một số cơ sở hạ tầng cho các ứng dụng web có thể mở rộng. cơ sở dữ liệu CouchDB và Riak được viết chủ yếu bằng Erlang, cũng như máy chủ xếp hàng tin nhắn RabbitMQ. Một trong những chìa khóa thành công của nó là nó xử lý đồng thời thông qua truyền thông điệp, không có trạng thái có thể thay đổi được chia sẻ. Đó là cách suy nghĩ về các vấn đề hữu ích, hơn bất kỳ ngôn ngữ lập trình chức năng cụ thể nào.

Hoặc, xem MapReduce. Đó là một cách rất hữu dụng để xem xét tính toán, ngay cả khi bản đồ và các hàm rút gọn của bạn xảy ra ở trạng thái nội bộ - và vì lý do đó, nó rất phù hợp để truy vấn các bộ dữ liệu lớn theo cách phân tán, chịu được lỗi.

Bằng mọi cách, hãy chọn bất cứ thứ gì có vẻ thiết thực nhất đối với bạn. Nhưng hãy luôn ghi nhớ lập trình chức năng trong tâm trí bạn, bởi vì bạn không bao giờ biết khi nào nó có thể có ích.



2

Ngôn ngữ và mô hình không quan trọng đối với các ứng dụng web, chúng đều tốt và xấu như nhau. Nếu bạn đang tìm kiếm lý do để học một mô hình mới, chỉ cần đi sâu vào. Lời khuyên của tôi là phân tích vấn đề bạn đang cố gắng giải quyết và chọn bộ công cụ thích hợp.


2

Javascript (ngôn ngữ của phần FE của web và ngày càng là BE) không có chức năng nhưng các chức năng là chức năng bậc nhất


2

Chúng tôi vừa khởi chạy một bảng tính trực tuyến trong đó phần phụ trợ được viết hoàn toàn bằng Erlang.

http://hypernumbers.com

Theo bất kỳ tiêu chuẩn nào, đây là một trong những ứng dụng web phức tạp nhất mà bạn có thể xây dựng với GUI khổng lồ với độ phức tạp về tinh thần.


2

Đây là kinh nghiệm của nhà phát triển web trong việc xây dựng ứng dụng web bằng Haskell . Mặc dù các ngôn ngữ chức năng rất an toàn và có tính đồng thời tốt, chúng luôn thiếu đi những điểm tốt nhất của giống api vì nó đã là con cưng của giới học thuật từ lâu và vẫn chưa được chấp nhận mạnh mẽ trong thế giới thực. Tôi hy vọng nó không quá xa. Erlang đã vào cuộc.


1

Lý do tại sao lập trình chức năng phổ biến với lập trình web là nó giải thích trạng thái được chia sẻ và thay đổi và cho phép lập trình viên thể hiện các phần chức năng thuần túy như các chức năng thuần túy. Các chức năng thuần túy có lợi thế là rất đơn giản để chạy song song - vì chúng không có tác dụng phụ.

Ít nhất đó là lý do của tôi.


1

Một câu trả lời ngắn gọn khác: http://www.mlstate.com - một nền tảng phát triển web đầy đủ, dựa trên FP. Ngữ nghĩa rõ ràng của ngôn ngữ cho phép tất cả các loại phân tích an toàn và bảo mật tự động, tối ưu hóa, v.v.

Báo trước: Tôi làm việc ở đó.


1

Các ngôn ngữ chức năng có thể không hữu ích trực tiếp để xây dựng các ứng dụng tuyệt vời nhưng chúng tôi sử dụng rất nhiều mô hình lập trình chức năng để xây dựng Ứng dụng của mình. Lập trình chức năng thuần túy đưa ra hạn chế là "không có tác dụng phụ". Điều này đảm bảo rằng các lệnh gọi chức năng thuần túy sẽ mang lại cùng một kết quả theo thứ tự mà chúng được gọi. Điều này không lý tưởng để phát triển web nhưng nếu lập trình chức năng được kết hợp với hệ thống thay đổi trạng thái, thì một ứng dụng web mạnh mẽ có thể được tạo ra. Hãy xem bài báo của tôi để biết thêm chi tiết: FAST Server Cũng như các slide này .


0

Có, vì lập trình chức năng có thể được thực hiện bằng bất kỳ ngôn ngữ nào, bạn có thể sử dụng nó như một trình phát triển web hàng ngày.

Bạn có nên không? nó phụ thuộc vào vấn đề bạn đang giải quyết. Lập trình hàm là một mô hình lập trình và bạn nên sử dụng nó ở đâu tùy thuộc vào vấn đề bạn đang giải quyết.

Để đưa ra quyết định đơn giản hơn, hãy nghĩ xem liệu việc giải quyết một số vấn đề bằng cách sử dụng các khái niệm OOP có dễ dàng hơn không, nơi mà tính đóng gói, tính đa hình, tính kế thừa như các tính năng có thể giúp cuộc sống của bạn dễ dàng hơn?

Nếu có, đừng đi lập trình chức năng ở đó và chỉ cần sử dụng OOP. Nếu ứng dụng của bạn sẽ thực hiện tính toán / tính toán / logic nghiệp vụ phức tạp và liên quan đến quá trình xử lý đồng thời nhiều, lập trình chức năng có thể cung cấp rất nhiều công cụ và lợi thế trong những trường hợp như vậy.

Đây chỉ là những phong cách xây dựng cấu trúc và các yếu tố khác nhau của chương trình, vì vậy tất cả đều là về việc sử dụng đúng công cụ cho đúng công việc. Hầu hết mọi thứ đều có thể làm được bằng cách sử dụng bất cứ thứ gì.

Lập trình chức năng trong phát triển web:

JavaScript hỗ trợ lập trình chức năng và nó hỗ trợ rất nhiều khi chúng ta đang trong bối cảnh phát triển web.React framework bị ảnh hưởng nhiều bởi các nguyên tắc lập trình chức năng và được sử dụng trong nhiều ứng dụng web ngoài kia.

Ngoài ra, bạn có thể tìm thấy nhiều ứng dụng web được xây dựng và chạy với các khuôn khổ được phát triển trên các ngôn ngữ lập trình chức năng được liệt kê bên dưới:

• WebSharper (F #)

• Chụp nhanh (Haskell)

• Thang máy (Scala)

• Ocsigen (OCaml)

• Chicago Boss, Zotonic (erLang)

Hy vọng Vì vậy, câu trả lời của tôi sẽ giúp bất cứ ai.


-2

Có thể bạn sẽ không sử dụng nó và không nên sử dụng nó nhưng khi bạn nói rằng ai đó sẽ luôn tìm thấy một ngoại lệ cho quy tắc (Viaweb, v.v.). Về cơ bản không có "siêu ngôn ngữ" chỉ có các dòng mã làm việc, thường là trong "Blub". Ngay cả Paul Graham cũng nói rằng lợi ích chính (chỉ trên thực tế) đối với Lisp là khả năng tạo nguyên mẫu nhanh chóng.

Ngoài ra, "siêu ngôn ngữ" thường làm tăng khả năng đọc mã, có nghĩa là "thiên tài" đã viết nó phải duy trì nó mãi mãi vì không ai khác có thể hiểu nó, đặc biệt là vì anh ta có khả năng viết nó bằng phương ngữ đã sửa đổi của chính mình. Điều này làm giảm phạm vi có thể có của bất kỳ dự án nào, có nghĩa là ngay cả khi những thứ mới, sáng tạo có thể được thực hiện, chúng không thể mở rộng và do đó vẫn ở quy mô tương đối nhỏ (như Hacker News in Arc).

Điều đó không có nghĩa là ai đó không thể có một ý tưởng thiên tài và thực hiện nó theo một phong cách khó hiểu, sau đó có thể được viết lại trong Blub và mở rộng để nhiều người có thể hưởng lợi từ nó. Trên thực tế, đó chính xác là những gì đã xảy ra trong tất cả các câu chuyện thành công của Lisp, chưa kể đến mọi triết gia nổi tiếng đã từng sống. Nhưng tất nhiên, nếu bạn là một "thiên tài", bạn cũng có thể tạo mẫu sản phẩm của mình theo cách khác.

Đối với FP trên JVM, có những thứ hạn chế nhưng tuyệt vời có thể. Mặc dù cá nhân tôi chỉ sử dụng nó để tạo mẫu, nhưng có thể bạn có một trường hợp sử dụng (thường là một cái gì đó liên quan đến đa luồng) nơi nó cung cấp một số cải tiến.


1
Trên thực tế, Paul Graham nói rằng lợi thế lớn của Lisps là nó là ngôn ngữ "mạnh mẽ nhất" hiện có. Ông ủng hộ lập luận của mình bằng cách nói rằng một phần tư số viaweb (theo dòng) là các macro Lisp. Lập trình meta trong hầu hết các ngôn ngữ (đặc biệt là những ngôn ngữ có sẵn vào giữa những năm 90) là một việc khó. Nó không phải là một nguyên mẫu nếu nó được đẩy lên máy chủ sản xuất.
nmichaels
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.