Tôi có nên chọn một ngôn ngữ lập trình chức năng?


10

Gần đây tôi đã quan tâm nhiều hơn về cách tôi viết mã của mình. Sau khi đọc một vài cuốn sách về các mẫu thiết kế (và thực hiện chúng quá mức, tôi chắc chắn) tôi đã thay đổi suy nghĩ của mình rất nhiều về việc gói gọn những thay đổi đó. Tôi có xu hướng nhận thấy rằng tôi viết ít giao diện hơn và mã định hướng phương thức nhiều hơn, nơi tôi thích đưa cuộc sống vào các lớp cũ với các vị từ, hành động và các nhiệm vụ ủy nhiệm khác. Tôi có xu hướng nghĩ rằng đó thường là những hành động thay đổi, vì vậy tôi gói gọn những hành động đó. Tôi thậm chí thường xuyên, mặc dù không phải lúc nào cũng chia nhỏ các giao diện thành một phương thức duy nhất và sau đó tôi thích sử dụng một ủy nhiệm cho tác vụ thay vì buộc mã máy khách để tạo một lớp mới.

Vì vậy, tôi đoán nó sau đó đánh tôi. Tôi có nên làm lập trình chức năng thay thế?
Chỉnh sửa: Tôi có thể có một quan niệm sai lầm về lập trình chức năng.

Hiện tại ngôn ngữ tôi chọn là C # và tôi đến từ nền tảng C ++. Tôi làm việc như một nhà phát triển trò chơi nhưng hiện tại tôi đang thất nghiệp.

Tôi có một niềm đam mê lớn đối với kiến ​​trúc. Đức tính của tôi là sạch sẽ, linh hoạt, có thể tái sử dụng và bảo trì mã. Tôi không biết liệu mình đã bị đầu độc bởi những cách này hay liệu nó tốt hơn. Tôi đang bị sốt tái cấu trúc hay tôi nên tiếp tục? Tôi hiểu đây có thể là một câu hỏi về "sử dụng công cụ phù hợp cho công việc" , nhưng tôi muốn nghe suy nghĩ của bạn.

Tôi có nên chọn một ngôn ngữ chức năng? Một trong những yếu tố sợ hãi của tôi là rời khỏi sự thoải mái của Visual Studio.


Bạn có thể thử F # nếu rời Visual Studio là một công cụ giảm giá.
Adam Lear

Nó không phải là một công cụ thỏa thuận. Tôi chỉ chưa thử nhiều lựa chọn khác. Tôi đoán rằng tôi đã có một số sợ hãi khi làm việc mà không có intellisense, tái cấu trúc hoặc các công cụ tương tự và có quan niệm rằng bạn sẽ kết thúc việc viết mã trong một trình soạn thảo văn bản đơn giản.
Tuyên bố

Tôi hiện đang thất nghiệp ... không phải đây là điều đầu tiên cần khắc phục sao?
Công việc

Tôi sẽ cố gắng làm việc mà không có VS trong một thời gian. Bạn có thể thấy rằng làm việc theo cách rất tối giản có thể rất thú vị.
Zachary K

@Job, vâng, nhưng tôi đã gặp phải một loạt các sự kiện khá tồi tệ gần đây :) Tôi bị hỏng chân (tôi cũng không mã bằng chân, nhưng, vẫn ...) chỉ gần đây sau khi rời công việc cũ của tôi tìm kiếm một cái mới
Tuyên bố

Câu trả lời:


5

ĐÚNG

Học những thứ mới nên vui. Và học một cách mới để lập trình sẽ giúp bạn trở thành một lập trình viên tốt hơn. Kiểm tra một trong Haskell hoặc Erlang, cả hai đều hoạt động nhưng chúng rất khác nhau. Nếu bạn chọn Haskell, hãy tìm một vài cuộc nói chuyện của "Simon Payton Jones" trên youtube hoặc podcast. Anh chàng là một diễn giả tuyệt vời.


1
Tôi chọn câu trả lời này vì nhiều lý do. @Zachary K nói rằng có thể rất vui khi bước ra khỏi hộp của một nơi nổi tiếng và có một quan điểm khác. Tôi không nên sợ thử một cái gì đó mới. Nó không phải là kết thúc ngày. Haskell là một ngôn ngữ đã thu hút sự chú ý của tôi trong các cuộc thảo luận khác nhau một vài lần trước đây. Tôi không biết nếu tôi cần một ngôn ngữ chức năng nhưng như @Toby Allen nói rằng đó là một cách tuyệt vời để xem các cách khác hoạt động như thế nào và tôi đồng ý với điều này sau khi dùng thử một số UnrealScript. @ammoQ đã bỏ lỡ vấn đề một chút nhưng tôi không có một định nghĩa rất hay cho câu hỏi của mình. Tôi vẫn nhận được mối quan tâm của anh ấy.
Tuyên bố

Vui mừng được giúp đỡ. Hãy vui vẻ
Zachary K

14

Thánh * * * *. Không có viên đạn bạc. Bước xuống. Thư giãn, hít thở sâu.

Chỉ vì bạn có một công cụ trong hộp công cụ của mình, điều đó không có nghĩa là bạn bị ràng buộc sử dụng nó. Tập trung vào nhiệm vụ trong tay, tức là viết một chương trình hoạt động và tái cấu trúc khi mã có mùi khó chịu. Đừng gói gọn và trừu tượng từng chi tiết nhỏ chỉ vì nó có thể thay đổi một ngày nào đó trong tương lai. IMO thực sự tốt hơn nhiều để bắt đầu thẳng, KISS & YAGNI, và phản ứng với các yêu cầu thay đổi khi chúng thực sự thay đổi .

Tôi không nghĩ rằng bất cứ ai ở đây có thể cho bạn biết liệu một ngôn ngữ chức năng có phù hợp hơn với nhu cầu của bạn hay không. Bởi vì bạn đã không cho chúng tôi biết bạn đang làm việc trên cái gì.


Chà, tôi không làm việc gì đặc biệt ngay bây giờ. Tôi đang ở giữa các công việc. Tôi là / là một nhà phát triển trò chơi.
Tuyên bố

3
Đây là một tình huống nguy hiểm liên quan đến quá mức. Không có thời hạn, không tồn đọng, chỉ là quá nhiều thời gian để bị ám ảnh bởi các chi tiết.
user281377

(Rất nhiều phỏng đoán phía trước vì tôi không có hình ảnh rõ ràng trong đầu) Tôi đoán "nhu cầu" của tôi được phản ánh nhiều hơn trong cách tôi thích viết mã. Tôi không biết nhiều về lập trình chức năng và tôi đoán cái tên có thể lừa tôi một chút. Tôi chỉ cảm thấy rằng sở thích của tôi không hướng đối tượng nhiều như tôi nghĩ. Vì vậy, có lẽ tôi nên tận hưởng làm việc trong một mô hình khác?
Tuyên bố

Vâng, tôi đoán đó là trường hợp. Tôi đang trong giai đoạn học tập ngay bây giờ vì vậy đó là lý do tại sao tôi khám phá các khả năng viết theo những cách cụ thể. Trong công việc, người ta thường không có thời gian để viết mã như vậy và bạn phải tôn trọng quy tắc ứng xử và duy trì phong cách nhất quán giữa các nhà phát triển.
Tuyên bố

2
Hoàn toàn ổn khi bạn thử mọi công cụ trong tay khi bạn đang ở giữa các công việc, nhưng tôi sợ chúng tôi không thể cho bạn biết giày có vừa hay không.
user281377

12

Bạn có thể chọn F # . Đó là ngôn ngữ chức năng .NET, sẽ cho phép bạn sử dụng Visual Studio và sử dụng lại rất nhiều kiến ​​thức .NET của bạn. Tất nhiên, đó là các hội đồng tích hợp với các hội đồng C # một cách liền mạch (cho phép bạn dễ dàng kết hợp C #, C ++ / CLI và F # trong một dự án). Hỗ trợ F # đi kèm với VS Pro hoặc tốt hơn, tôi không chắc liệu nó có được bật theo mặc định hay không.


Tôi nghĩ rằng có một addon cho F # trong VS2008, nhưng nó được mặc định trong VS2010.
apoorv020

F # hoạt động ngay cả với VS Shell miễn phí.
SK-logic

6

IMO, thật đáng để thử một ngôn ngữ chức năng. Ngay cả khi bạn không bao giờ sử dụng nó trực tiếp trong một sản phẩm được phát hành, việc học nó gần như chắc chắn sẽ giúp đưa ra một quan điểm / quan điểm hơi khác về lập trình. Ngay cả khi bạn kết thúc việc tiếp tục thực hiện tất cả mã hóa "thực" của mình trong C #, rất có thể công bằng rằng nó sẽ giúp bạn cải thiện mã bạn viết trong C #.

Như những người khác đã đề cập, sự lựa chọn rõ ràng cho ai đó quen với Visual Studio là F #, về cơ bản là một dẫn xuất Ocaml / Caml / ML. IMO, đó là một lựa chọn tốt của Microsoft khi giới thiệu cho mọi người về lập trình chức năng - đó là ngôn ngữ chức năng đầy đủ, nhưng không có cú pháp gần như xa lạ như một số người (ví dụ, trong khi các ngôn ngữ dựa trên Lisp làm có lợi thế thực sự, người mới bắt đầu hầu như luôn cảm thấy khó đọc).


2

Vâng, bạn nên.

Nếu bạn chọn một ngôn ngữ thuần túy, như Haskell, bạn sẽ học không chỉ một ngôn ngữ mới, mà cả một cách suy nghĩ mới. Điều này cũng có thể giúp bạn sau này trong công việc proceural / OO của bạn.

F #, mặt khác, không thuần túy, và vì vậy bạn có thể dễ dàng bỏ lỡ những gì quan trọng trong lập trình chức năng. Yóu có thể, để nói, tiếp tục viết các chương trình thủ tục làm thay đổi một biến ở đây, thực hiện một số tác dụng phụ ở đó, chỉ bằng cú pháp F #.


Tôi thực sự đã bắt đầu tại tryhaskell.org :) Thật thú vị khi học những điều mới.
Tuyên bố

1

Nếu bạn đã sử dụng c #, bạn không cần một ngôn ngữ mới - với sự kết hợp của các phương thức mở rộng, lambdas và các loại Func / Action chung, việc viết mã chức năng trong C # khá dễ dàng - theo cách đó bạn có thể sử dụng một kiểu chức năng trong các thuật toán nơi nó có ý nghĩa nhất mà không cần phải thay đổi toàn bộ ứng dụng.


1
Bạn luôn cần một ngôn ngữ khác. Ngay cả khi bạn không bao giờ sử dụng nó, đó là một kinh nghiệm học tập tuyệt vời để học một ngôn ngữ mới. Không một ngôn ngữ nào có tất cả.
Toby Allen

Bạn luôn cần học, nhưng bạn không cần phải học ngôn ngữ khác. Lợi ích đến từ việc học các khái niệm về lập trình chức năng hơn là ngôn ngữ và bạn có thể làm điều đó mà không cần rời khỏi môi trường quen thuộc và thay đổi toàn bộ dự án. C # là đủ tốt, và trong điều kiện thực tế có một lợi thế rất lớn khi chỉ có mã chức năng trong các thuật toán thực sự được hưởng lợi từ nó.
Tom Clarkson

Vâng tôi đoán rằng mối quan tâm của tôi thiên vị hơn nếu có ngôn ngữ phù hợp hơn (về mặt cú pháp) để làm việc với các phương thức / chức năng theo cách mà tôi thấy mình thường làm việc trong khi chơi trò này. C # cung cấp các biểu thức lambda và bản thân nó cũng tốt nhưng ví dụ, có một hàm trả về một giá trị mà không có bất kỳ tham số nào mang lại mã như () => x, và có thể có nhiều cách sạch hơn.
Tuyên bố

+1 @Toby. Gần đây tôi đã lướt qua tham chiếu UnrealScript và thấy một số giải pháp ngôn ngữ thú vị để làm việc với các tiểu bang et.c. Nó mang đến C # về mặt suy nghĩ về vấn đề và họ có một giải pháp khá hay. Vì vậy, vâng, tôi tin rằng bạn học được rất nhiều khi bạn bước ra khỏi hộp cát của mình và cướp đi hàng xóm của bạn cho tất cả cát và đồ chơi bạn tìm thấy :)
Tuyên bố
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.