Ý kiến ​​mạnh mẽ nhất của bạn chống lại lập trình chức năng là gì? [đóng cửa]


25

Lập trình hàm là một trong những mô hình lập trình lâu đời nhất. Tuy nhiên, nó không được sử dụng nhiều trong ngành so với các mô hình phổ biến hơn. Nhưng nó phần lớn đã được nhấn mạnh trong học viện.

Ý kiến ​​mạnh mẽ nhất của bạn chống lại lập trình chức năng là gì?


5
LINQ? Đại biểu .NET? DSL như Mathicala?
Jon Harrop

5
Ngẫu nhiên, thuật ngữ "lập trình chức năng" được sử dụng bởi những người khác nhau có nghĩa là những thứ khác nhau, do đó bạn cần làm rõ nghĩa bạn đang sử dụng.
Jon Harrop

2
Bạn sẽ không bao giờ tìm thấy bất kỳ người nào viết mã trên cơ sở mã chức năng của bạn. Không phải là một quyết định kinh doanh tuyệt vời, giới hạn tài năng của bạn.
Patrick Hughes

Câu trả lời:


52

Vấn đề là mã phổ biến nhất vốn có liên quan đến các ứng dụng kinh doanh, trò chơi, giao diện người dùng, v.v. Không có vấn đề gì với một số phần của ứng dụng hoàn toàn hoạt động; trong thực tế, hầu hết các ứng dụng có thể có lợi trong ít nhất một lĩnh vực. Nhưng việc buộc các mô hình ở khắp mọi nơi cảm thấy phản trực giác.


19
Chắc chắn rồi. Lập trình chức năng thuần túy KHÔNG phù hợp cho các ứng dụng hướng nhà nước. Đây là lý do tại sao tôi thích các ngôn ngữ lai có thể làm cả hai. Sử dụng mô hình chức năng cho các vấn đề chức năng, mô hình mệnh lệnh cho các vấn đề bắt buộc.
Matt Olenik

8
Đã đồng ý! Nhà nước là một phần thiết yếu của lập trình. Đây là lý do tại sao ngay cả Haskell, theo một cách nào đó, ngôn ngữ thuần túy nhất của ngôn ngữ FP, cho phép sử dụng trạng thái và IO - nó chỉ đơn giản thực thi sự phân biệt giữa mã IO / mã trạng thái có thể thay đổi và mã thuần, rất tốt để kiểm tra và dễ hiểu .
Hóa đơn

8
Đó là lý do tại sao tôi yêu Haskell. Nó khuyến khích để giảm thiểu những mã trạng thái. Trong OO tôi nhắm đến việc viết mã có thể tái sử dụng, dễ hiểu và dễ kiểm tra. Hầu hết thời gian tôi kết thúc với mã tôi sẽ không viết nhiều khác nhau trong Haskell.
LennyProgrammer

4
"Nó chỉ đơn giản là thực thi một sự phân biệt giữa mã IO / mã trạng thái có thể thay đổi và mã thuần, rất tốt để thử nghiệm". Bạn thậm chí không thể in các thông báo gỡ lỗi mà không phá vỡ hệ thống loại hoặc giới thiệu creep monad.
Jon Harrop

2
Có lẽ một chương trình chức năng thuần túy sẽ khiến thế giới hoàn toàn không thay đổi bằng cách chạy nó?
Martin Beckett

24

Vấn đề với lập trình chức năng không phải là lập trình chức năng - hầu hết những người thực hiện nó và (tệ hơn) hầu hết những người thiết kế ngôn ngữ để thực hiện nó.

Vấn đề bắt nguồn từ thực tế là mặc dù rất thông minh (đôi khi hết sức thông minh) nhưng có quá nhiều người chỉ hơi quá cuồng tín về sự thuần khiết, hoàn hảo và thực thi quan điểm của họ (thường khá hẹp) về thế giới và lập trình lên ngôn ngữ và mọi người sử dụng nó.

Một trong những kết quả là một sự thất bại để thỏa hiệp. Điều này dẫn (trong số những thứ khác) đến khoảng 10.000 ngôn ngữ và phương ngữ đủ khác nhau để gây khó chịu nhưng chỉ hiếm khi đủ khác nhau để một người có lợi thế thực sự đáng kể so với các ngôn ngữ khác. Nhiều người cũng nhìn vào thế giới thực và quyết định rằng vì nó không phù hợp với mô hình chức năng rất tốt, về cơ bản, nó chỉ sai và tốt nhất là bỏ qua.

Việc không thể thỏa hiệp cũng đã dẫn đến khá nhiều ngôn ngữ hoàn toàn đẹp cho một loại vấn đề cụ thể (hoặc một vài loại vấn đề cụ thể) nhưng thực sự hút rất nhiều ngôn ngữ khác. Một số trong đó có thể là do chính mô hình chức năng gây ra, nhưng dường như nhiều hơn (ít nhất là đối với tôi) được gây ra bởi loại tính cách cơ bản thu hút khu vực này để bắt đầu.

Điều đó dẫn đến một số vấn đề. Trước hết, học "lập trình chức năng" chủ yếu có giá trị triết học. Với hầu hết các loại ngôn ngữ khác, việc biết một ngôn ngữ của một thể loại cụ thể sẽ giúp ích rất nhiều trong việc học ngôn ngữ khác. Nếu dự án của tôi sử dụng ngôn ngữ XI thường có thể thuê một người biết ngôn ngữ Y (nhưng không phải X) khá an toàn. Với các ngôn ngữ chức năng, điều đó ít đúng hơn nhiều. Bạn có thể biết Erlang khá rõ, nhưng vẫn thấy các đơn vị Haskell hoàn toàn xa lạ và không thể hiểu được.

Kết hợp số lượng ngôn ngữ với khả năng di chuyển hạn chế giữa chúng và bạn gặp phải một tình huống xấu: gần như không thể có một ngôn ngữ hoặc phương ngữ để tạo thành "khối quan trọng" cần thiết để sử dụng hợp lý. Đó là chậm thay đổi, nhưng nó vẫn còn rất nhiều như Linux trở thành hệ điều hành máy tính để bàn chiếm ưu thế - mỗi năm, người ta đưa ra để thuyết phục lập luận rằng cuối cùng này sẽ là các năm - và cũng giống như những người đã dự đoán rằng mỗi năm nay đã nhiều năm rồi, họ sẽ lại sai. Điều đó không có nghĩa là điều đó (một trong hai) không bao giờ xảy ra - chỉ là những người nhìn vào dự đoán và nghĩ rằng "không, không phải trong năm nay" là những người đúng cho đến nay.


4
Có lẽ sẽ có nhiều sự giao thoa giữa các ngôn ngữ chức năng nếu có nhiều ngôn ngữ chức năng hơn.
Barry Brown

5
Bạn không thể "hoạt động" nếu không có sự thuần khiết đó. Một khi bạn bước qua dòng, toàn bộ khái niệm sụp đổ và bạn kết thúc với một ngôn ngữ tiêu chuẩn, song song, lộn xộn mà không có bất kỳ lợi thế nào.
Patrick Hughes

7
Vì vậy, vấn đề đầu tiên của bạn là các ngôn ngữ chức năng không đủ khác biệt để có lợi thế với nhau và vấn đề thứ hai của bạn là chúng có quá khác nhau để dễ dàng đi qua không?
Tikhon Jelvis

2
Đối với tôi, câu trả lời này đọc như một lời nói. Lập luận của bạn sẽ hấp dẫn hơn nhiều nếu bạn đưa ra một số ví dụ.
Benjamin Hodgson

1
...roughly 10,000 languages and dialects that are enough different to annoy but only rarely enough different for one to have a truly significant advantage over the others...Không, có vẻ như tất cả các lang thủ tục. Java, Scala, Kotlin, C ++, C #, Groovy, Cheddar, ES6, Ceylon, Python, danh sách cứ lặp đi lặp lại - tất cả chỉ là những lần lặp nhàm chán của C mà không giải quyết được vấn đề thực sự. Đó là ý kiến ​​thô lỗ của tôi để bổ sung cho câu trả lời thô lỗ này: D
con mèo

17

Tôi nghĩ rằng lý do lập trình chức năng không được sử dụng rộng rãi là vì nó cản trở bạn quá nhiều. Thật khó để có một cái nhìn nghiêm túc, ví dụ, Lisp hoặc Haskell, mà không nói "toàn bộ ngôn ngữ này là một sự đảo ngược trừu tượng lớn." Khi bạn thiết lập các tóm tắt cơ bản mà người viết mã không thể có được bên dưới khi cần thiết, bạn sẽ thiết lập những thứ mà ngôn ngữ đơn giản không thể làm được, và ngôn ngữ càng có nhiều chức năng thì càng có nhiều thứ có xu hướng.

Lấy Haskell, ví dụ. Nhân danh sự thuần khiết về chức năng, bạn được yêu cầu sử dụng các phép đảo ngược trừu tượng mà không ai hiểu được để quản lý trạng thái và I / O, hai phần cơ bản nhất của bất kỳ và mọi chương trình máy tính tương tác với bất kỳ thứ gì! Điều đó trở nên cũ nhanh.


9
+1, mặc dù đôi khi tôi cũng cảm thấy như vậy khi tôi lập trình bằng các ngôn ngữ mệnh lệnh cấp cao. Ví dụ, tại sao fsck tôi cần tạo một lớp phương thức duy nhất thực hiện một giao diện phương thức duy nhất trong Java thay vì chỉ sử dụng một con trỏ hàm như tôi sẽ làm trong C?
dsimcha

14
Tôi muốn nói rằng không phải là bạn "không thể ở bên dưới" những điều trừu tượng đó, nó còn hơn thế nữa, nó chỉ tốn rất nhiều công sức. Chúng ta thường nhặt một quả chuối và ăn nó bằng một ngôn ngữ bắt buộc; Haskell (ví dụ) làm cho bạn điền vào mẫu 20 trang trước vì nó ưu tiên đảm bảo rằng sẽ không có quả chuối nào bị ăn một cách bí ẩn khi bạn không nhìn. Điều này giúp ích khi suy luận về chuối, nhưng đôi khi bạn chỉ đói.
j_random_hacker

4
@dsimcha: đây là một đặc thù của Java chứ không phải là một xu hướng trong các ngôn ngữ mệnh lệnh cấp cao. Trong thực tế, các ngôn ngữ cấp cao có thể có nhiều khả năng có chức năng như một đối tượng hạng nhất.
Muhammad Alkarouri

3
Sự cần thiết cho các đơn vị trong Haskell bắt nguồn không phải từ độ tinh khiết chức năng mà từ thực tế là tác dụng phụ và đánh giá lười biếng là hai hương vị tuyệt vời mà KHÔNG có hương vị tuyệt vời với nhau. Monads lực lượng đánh giá tuần tự. (Thực sự, họ nên được gọi là Nhà xây dựng tính toán hoặc một cái gì đó. 'Monad' là một cái tên tệ hại cho bất kỳ ai khác ngoài một nhà lý thuyết thể loại.) Và bạn có thể vui vẻ làm FP mà không cần (cố ý sử dụng) các đơn nguyên!
Frank Shearar

4
Một điều cần lưu ý: với các "nghịch đảo trừu tượng" này, ngôn ngữ có thể bị hạn chế hơn, nhưng trình biên dịch và thời gian chạy có nhiều đảm bảo hơn về mã của bạn và có thể làm được nhiều hơn. Điều này giống như bộ sưu tập rác - trong ngôn ngữ gc, bạn không thể chỉ là không gian malloc (có thể hữu ích), nhưng bù lại, bộ thực thi có thể quản lý tất cả bộ nhớ cho bạn, có khả năng hiệu quả hơn bạn có thể làm thủ công. Nó giống nhau với độ tinh khiết chức năng.
Tikhon Jelvis

8

Với tất cả sự tôn trọng, tôi nghĩ rằng câu hỏi của bạn không được đặt ra. Lập trình hàm là một công cụ, hay đúng hơn là một bộ công cụ hữu ích để giải quyết các loại vấn đề nhất định. Có ý kiến ​​về nó chỉ có ý nghĩa trong bối cảnh của một vấn đề hoặc ứng dụng cụ thể. Có ý kiến ​​chống lại nó nói chung, giống như có ý kiến ​​chống lại kìm hoặc cờ lê.


4
Đó là một điểm hợp lệ về mặt logic, nhưng nó có thể được khắc phục bằng cách giải quyết "cho loại vấn đề lập trình mà bạn thường gặp" vào câu cuối cùng của câu hỏi của OP. (Không có vấn đề gì khi độc giả cá nhân sẽ gặp phải các vấn đề khác nhau, miễn là họ mô tả những gì họ đang có.)
j_random_hacker

4

Ngay cả khi tôi đã thành thạo nó, tôi có thể không thích sử dụng ngôn ngữ chức năng cho sản phẩm thương mại vì lý do đơn giản là chúng không được hiểu rộng rãi và nếu tôi kỳ vọng doanh nghiệp sẽ phát triển, tôi sẽ lo ngại về khả năng tìm kiếm các nhà phát triển khác có khả năng duy trì hoặc kéo dài nó theo thời gian.

Điều đó không thể tưởng tượng được và có lẽ bạn sẽ có được một nhà phát triển tiêu chuẩn cao hơn bởi vì một học sinh javaschool không có kỹ năng hack thực sự sẽ không biết bắt đầu từ đâu trong một dự án kiểu đó, nhưng nhóm các nhà phát triển có khả năng hạn chế chắc chắn sẽ là một sự cân nhắc cần thiết từ góc độ kinh doanh.


2

Đến giờ đi chợ

Khó có thể thoát khỏi một cảnh quan CNTT đầy đủ của mã thủ tục và thần chú.


1
Các chương trình chức năng thường dễ kiểm tra hơn. Và chúng ngắn hơn. Vì vậy, không đồng ý. Tôi nghĩ bạn trả lời một câu hỏi khác "Ý kiến ​​mạnh mẽ nhất của bạn chống lại việc chuyển sang lập trình tự do là gì?".
Jonas


2

trước hết tôi không chấp nhận bất kỳ đối số nào liên quan đến lập trình trạng thái và fp. nhìn vào đơn nguyên Bang trong haskell và bạn sẽ tìm thấy một số cách mới thú vị để đánh giá tác động của trạng thái đối với mã của bạn.

Nếu tôi đưa ra một cuộc tranh luận có ý nghĩa chống lại fp, thì việc học một ngôn ngữ chức năng nghiêm túc như haskell cũng giống như học lái một chiếc xe công thức .... phấn khởi và giáo dục, nhưng đáng buồn là vô dụng đối với mã hóa công nghiệp hàng ngày bởi vì, trung bình , đồng nghiệp của bạn đang lái xe camrys và khá vui khi làm điều đó. vẫn rất khó tìm việc trong môi trường thân thiện với fp và tôi không thấy điều này thay đổi trừ khi người ta sẵn sàng tự mình tìm kiếm hoặc tìm kiếm một số học viên nổi tiếng của fp.

Tôi cho rằng câu trả lời của tôi cho thấy tôi là một fanboy fp. Tôi khuyên bạn nên cung cấp một ngôn ngữ fp thực sự như haskell một vòng quay nghiêm túc trước khi lo lắng về việc tìm lý do tại sao bạn không nên.


6
Tôi nghĩ rằng đoạn đầu tiên của bạn mô tả chính xác những gì sai với suy nghĩ của FP. Chúng tôi không muốn "những cách mới thú vị để đánh giá tác động của trạng thái đối với mã của chúng tôi." Điều đó có nghĩa là gì?!? Chúng tôi chỉ muốn nhà nước ở đó và dễ dàng truy cập bởi vì chúng tôi cần nó để thực sự hoàn thành công việc.
Mason Wheeler

2
Chiếc xe Camry tôi lái có vấn đề, nhưng nó không yêu cầu tôi phải liên tục kiểm tra dưới mui xe xem có bị rò rỉ không gian không . Haskell giống như một ngôn ngữ trông giống như một chiếc xe F1, nhưng thực sự không thể tạo ra vòng quay cao trong một khoảng thời gian dài. :-P
j_random_hacker

1
@Mason Wheeler: "Chúng tôi không muốn những cách mới thú vị để đánh giá tác động của trạng thái đối với mã của chúng tôi." Thay vào đó, chúng tôi muốn dành một tuần để theo dõi một lỗi rất khó chịu do tác dụng phụ không mong muốn (tôi nói từ kinh nghiệm cá nhân).
Giorgio

@brad clawsie: Tôi nghĩ rằng toàn bộ vấn đề kiểm soát tác dụng phụ trong FP có thể giúp mã hóa hiệu quả hơn nhiều: mất nhiều thời gian hơn để viết nhưng mất ít thời gian hơn để khắc phục. Thật không may, người ta phải đặt khá nhiều nỗ lực vào việc học trước tiên và rất nhiều lập trình viên không có suy nghĩ dài hạn này: mọi việc phải được thực hiện nhanh chóng. Không có thời gian để làm điều đó đúng lần đầu tiên, nhưng luôn có thời gian để gỡ lỗi và sửa nó sau. :-)
Giorgio

@Mason Wheeler: Từ quan điểm chức năng, việc có trạng thái chia sẻ chỉ hữu ích cho mục đích tối ưu hóa: sao chép các giá trị xung quanh tốn quá nhiều thời gian và bộ nhớ, vì vậy bạn chia sẻ một đối tượng dữ liệu để tránh sao chép không cần thiết. Nhưng thực thi một trạng thái chia sẻ như một quy tắc ngay từ đầu là một loại tối ưu hóa sớm.
Giorgio

2

Tôi là một fan hâm mộ lớn và ủng hộ lập trình chức năng. Nhưng đây là quan điểm của tôi:

  • dễ học các
    ngôn ngữ lập trình như python và ruby ​​(và nhiều ngôn ngữ khác) rất dễ học. Lập trình chức năng nâng cao, với các ngôn ngữ như Haskell, Agda, Coq, ATS, v.v., khá khó học. Một số sử dụng thuật ngữ lập trình có cấu trúc toán học. Thật dễ dàng nếu bạn quen thuộc với lý thuyết thể loại và toán học trừu tượng, nhưng khá nhiều công việc nếu bạn không có manh mối gì, ví dụ như "đơn nguyên" là gì.

  • lập trình với một ngôn ngữ kịch bản có thể có nghĩa là năng suất cao hơn.
    Trong một số tình huống sử dụng các ngôn ngữ script như python và ruby ​​có thể dẫn đến năng suất cao hơn. Điều này có nghĩa là tạo mẫu nhanh và dán các gói hoặc thư viện khác nhau. Ngay cả việc sử dụng các ngôn ngữ động (ví dụ lập trình hướng đối tượng động) có thể là một điều tốt trong bối cảnh này. Thông thường gõ tĩnh là tốt hơn, nhưng kịch bản với các loại động có thể có tác động tích cực.

  • cân nhắc kinh doanh
    Lập trình chỉ là một tập hợp nhỏ của các dự án phần mềm thành công. Phần mềm phải hoạt động, người dùng phải hài lòng và điều này không nhất thiết phụ thuộc vào ngôn ngữ lập trình được sử dụng. Các nhà quản lý phải nghĩ đến lợi ích và rủi ro khi đánh giá công nghệ mới và ngôn ngữ lập trình. Lập trình viên mới có thể học nhanh ngôn ngữ lập trình mới không? Có kinh nghiệm trong công ty với công nghệ? Có rủi ro và điều này sẽ khó tranh luận với quản lý cấp trên?

Trong ngữ cảnh kinh doanh, lập trình chức năng có thể được sử dụng trong các hệ thống thêm vào các thành phần phần mềm cốt lõi, ví dụ, các thành phần không quá quan trọng. Ví dụ, một ngân hàng sẽ khó thay đổi phần mềm cốt lõi, nhưng thêm các phần mới (GUI, phần mềm giám sát, v.v.) bằng ngôn ngữ lập trình mới. (Có thể có ngoại lệ, nhưng đây là kinh nghiệm của tôi với các ngân hàng.)

Hơn nữa, lập trình chức năng là rất hữu ích khi xác minh chính thức là một lợi ích hoặc phải.


3
"Dễ học": Tôi không thấy làm chủ Haskell khó hơn làm chủ C ++ hiện đại. Tôi nghĩ rằng chúng ta có xu hướng xem xét cứng những gì chúng ta không quen thuộc.
Giorgio

1

Tôi không phản đối FP như một mô hình hữu ích, nhưng tôi phản đối nó như một mô hình duy nhất có sẵn trong ngôn ngữ lập trình.

Nó cung cấp lợi thế trong việc giải quyết rất nhiều vấn đề. Tuy nhiên, FP có thể, và đã được áp dụng trong các ngôn ngữ thủ tục như C.


Đồng ý với câu thứ nhất, không đồng ý với câu thứ hai. Về cơ bản, bạn không thể làm FP mà không thu gom rác.
dsimcha

Không có yêu cầu rằng hệ thống thời gian chạy của ngôn ngữ thiếu quản lý bộ nhớ trong suốt (với bộ sưu tập rác) để phù hợp với nhãn "thủ tục", do đó, thật mỉa mai khi bạn nói câu thứ hai theo cách đó. BASIC là một ngôn ngữ như vậy.
Huperniketes

"Về cơ bản, bạn không thể làm FP mà không thu gom rác." - Tại sao?
quant_dev

+1 Lập trình chức năng ở cấp độ cơ bản nhất là lập trình không trạng thái. Tôi không nghĩ có bất kỳ ngôn ngữ nào không thể làm điều này ở một mức độ nào đó. Tôi đã viết các hàm trong C, C ++, Java, assembly, C #, thậm chí là Basic. Tất cả những gì được yêu cầu là chức năng không có tác dụng phụ hoặc giữ trạng thái giữa các cuộc gọi.
Michael K

Mặt khác, nếu ngôn ngữ của bạn hoàn toàn thuần túy, trình biên dịch sẽ mất nhiều thời gian hơn trong việc tối ưu hóa. Ngoài ra, mã trở nên dễ dàng hơn để kiểm tra và lý do về. Là chức năng trong suốt không đưa ra một số ưu điểm hơn phương pháp lai; nếu bạn sẽ có phần lớn mã của bạn là không trạng thái, bạn cũng có thể đi xa hơn một chút và gặt hái những lợi ích bổ sung.
Tikhon Jelvis

1
  1. (và cho đến nay là quan trọng nhất) Lực lượng lao động lập trình viên không được đào tạo về các ngôn ngữ hoặc phong cách đó
  2. Nhiều người trong số các nhà truyền giáo chức năng đi ra như một cái lỗ hoặc bánh trái vì cách họ cố gắng bán chức năng. Không ai thích một cái lỗ, và không ai sẽ ném tiền đằng sau một chiếc bánh trái cây. Nhắc bạn, tôi thực sự thích các công cụ chức năng và muốn kéo nó vào, nhưng tôi biết tại nơi làm việc của mình, tôi sẽ là người duy nhất có thể phát triển nó mà không phải bỏ tiền ra để đào tạo (bán cứng), và hầu như tất cả đều tốt tài liệu tham khảo nói chuyện tại người đọc.

Chức năng sẽ xuất hiện khi chúng ta có hàng trăm lõi và nhận ra rằng khóa không mở rộng được. Sau đó, dữ liệu lồng nhau song song sẽ là cách duy nhất để thực hiện các chương trình "sắt lớn" và chức năng vượt trội ở đó.


0

FP rất tuyệt trong giới học thuật bởi vì thật tuyệt khi viết các chương trình ngắn đẹp, trong khi bỏ qua hiệu suất. Không có âm mưu chống lại nó trong thế giới thực. Ngoài ra, ví dụ thực hiện một số công cụ (ví dụ như sắp xếp cơ số) có vẻ như hoàn toàn đau đớn trong FP. Oh và mã được tạo là IMHExperience sloooooooooooooooooooow.


4
Vâng, đó chỉ là không đúng sự thật. Mã Haskell thường ngang bằng với C và Java và nhanh hơn nhiều so với Python và bạn bè. Nó cũng thường tầm thường để song song, có khả năng cho tốc độ cao hơn nữa.
Tikhon Jelvis

0

Một số người có đường cong học tập khá dốc, mất nhiều thời gian (đặc biệt nếu bạn đến từ OOP; bạn sẽ vùi đầu vài lần trước khi thay đổi mô hình).

Mặc dù tôi đã bắt đầu lập trình chức năng (đến từ Java và đến Clojure) nhưng tôi vẫn thấy nó khá khó khăn. Cộng đồng dường như không viết mã biểu cảm như Java.

Có vẻ như có một sự mất mát nhỏ trong biểu cảm và một sự gia tăng nhỏ về độ phức tạp.


Tôi nghĩ rằng những người không có kinh nghiệm lập trình trước đó sẽ nói rằng OOP có đường cong học tập dốc hơn so với FP, vì FP gần với Toán học hơn. Tôi không hiểu ý của bạn với "Cộng đồng dường như không viết mã biểu cảm như Java", quan điểm của bạn là gì?
Jonas

Tôi chưa bao giờ nghe nói về ngôn ngữ chức năng mất biểu cảm. Nhưng sau đó tôi cũng chưa bao giờ sử dụng một ngôn ngữ ít biểu cảm hơn Java, vì vậy tôi có thể có một định nghĩa khác về "biểu cảm".
glenatron

@Jonas - vì một điều đơn giản: tắt tên cho các hàm, biến, v.v ... ý tôi là, tại sao không chỉ đặt tên cho những gì chúng là hoặc phải làm? Tại sao "chiều"?
Belun

1
@Belun: Điều đó không có gì với lập trình chức năng để làm. Bạn phải tham khảo một ngôn ngữ lập trình cụ thể. Bản đồ là một chức năng phổ biến trong nhiều ngôn ngữ lập trình chức năng và nó có một tên hay . pmapbạn đề cập đến có thể là một biến thể parallell.
Jonas

tôi nói "cộng đồng dường như không viết". điều đó có nghĩa là đó là những gì tôi đã trải nghiệm và nó phù hợp với sự hài hước mà tôi đã xem. nó không phải áp dụng cho tất cả, mặc dù tôi nghi ngờ nó. nó không liên quan đến lập trình chức năng, nó giống như phong cách của nó
Belun

0

Mặc dù tôi có ít kinh nghiệm với các ngôn ngữ lập trình chức năng (tôi biết một số Haskell và Lisp), tôi thấy mô hình FP rất mạnh mẽ và thường thanh lịch hơn các mô hình khác. Tôi ước tôi có cơ hội làm việc trong một dự án nghiêm túc bằng cách sử dụng FP.

Lĩnh vực duy nhất mà tôi có một số nghi ngờ nghiêm trọng về hiệu quả của FP là làm thế nào nó có thể xử lý các cấu trúc dữ liệu phức tạp không thể xác định theo quy nạp, ví dụ như biểu đồ. Ví dụ, nếu tôi phải thực hiện một thuật toán hoạt động trên một biểu đồ lớn, có thể đi qua biểu đồ và thực hiện các thay đổi cục bộ nhỏ, tôi tự hỏi liệu một cách tiếp cận FP có thể phù hợp với một cách tiếp cận bắt buộc trong đó chương trình được phép chuyển từ nút sang nút sử dụng con trỏ.

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.