Hướng dẫn disadvantages of function in c++ - nhược điểm của hàm trong c ++

Phần lớn sức mạnh của lập trình chức năng là hiển nhiên, nhưng tôi muốn dành một chút thời gian để khám phá lý do và chống lại việc sử dụng một phong cách chức năng.

Năm nhược điểm/nhược điểm của lập trình chức năng

Tôi không cố gắng bán cho bạn một số phương pháp chữa bệnh cho những tai ương lập trình của bạn. Chắc chắn có những lời phê bình của phương pháp này và nơi không sử dụng lập trình chức năng. Hãy cùng xem một vài tình huống tấn công tôi là quan trọng nhất.

1. Đầu vào/đầu ra (IO)

IO dựa vào các tác dụng phụ, do đó, nó vốn không có chức năng. Nhưng hóa ra, nó cũng rất quan trọng để viết một ứng dụng hữu ích. Có một số cách tiếp cận để tích hợp IO vào ứng dụng của bạn.

Tôi nghĩ rằng cách tốt nhất để tiếp cận IO với mã chức năng là cách ly IO và chấp nhận rằng nó đã giành được chức năng. Nếu bạn cô lập chính xác nó, bạn có thể soạn nó bằng mã chức năng và coi kết quả của IO là một giá trị. Có rất nhiều thứ chúng ta có thể đi vào việc sử dụng IO trong các ứng dụng chức năng, nhưng nó gần như không thể xử lý hoàn toàn chức năng.

2. đệ quy

Nói chung được quảng cáo là một trong những phần tốt nhất của lập trình chức năng, đệ quy cũng rất tốn kém để sử dụng. Nó thường sử dụng ngăn xếp cuộc gọi làm cấu trúc dữ liệu, nhưng hóa ra bộ nhớ là một tài nguyên có giá trị. Có nhiều cách để viết các chức năng đệ quy mà don don có chi phí cao như vậy về bộ nhớ, nhưng chúng sẽ yêu cầu tối ưu hóa trình biên dịch hoặc viết lại hàm đệ quy theo kiểu hơi khác.

3. Vấn đề thuật ngữ

Lập trình chức năng có rất nhiều thứ dành cho nó, nhưng dễ giải thích không phải là một trong số đó. Với nguồn gốc của nó trong toán học, nó có thể bị sa lầy bởi rất nhiều thuật ngữ. Các thuật ngữ như các chức năng thuần túy của người Hồi giáo và tính minh bạch tham chiếu của người Hồi giáo có thể nghe giống như tiếng Hy Lạp đối với những người mới lập trình chức năng, hoặc thậm chí là các cựu chiến binh chức năng, những người đã học được tất cả các thuật ngữ.

Điều này nghe có vẻ tầm thường, nhưng tôi không nghĩ rằng vấn đề nên được đánh giá thấp. Tôi đã có những cuộc trò chuyện với đồng nghiệp, nơi chúng tôi dành một nửa thời gian để xác định những gì chúng tôi nói, chỉ để nhận ra chúng tôi nói chính xác điều tương tự.

4. Tính không chức năng của máy tính

Điều này không có nghĩa là máy tính không làm việc, nhưng các máy tính không hoạt động theo cách chức năng. Họ đã xây dựng dựa trên các hoạt động bắt buộc, trạng thái. Khi nó xuống kim loại, chúng chỉ là những cỗ máy nhà nước lớn, vì vậy ý ​​tưởng về một ngôn ngữ chức năng thuần túy cho đến tận kim loại không có ý nghĩa.

5. Khó khăn của lập trình trạng thái

Mở rộng về những gì tôi đã đề cập chỉ một lúc trước, đại diện cho trạng thái trong lập trình chức năng là không trực quan như hầu hết các hoạt động chức năng khác. Có một số cách để làm việc xung quanh đại diện trạng thái trong lập trình chức năng, nhưng chúng không bao giờ trực tiếp như trong một ngôn ngữ phi chức năng.

Redux.js là một ví dụ tuyệt vời về cách quản lý trạng thái theo cách chức năng. Nhược điểm lớn nhất của nó là phải sử dụng rất nhiều nồi hơi và rất nhiều thuật ngữ.

Bốn điểm mạnh của lập trình chức năng

Tất nhiên, lập trình chức năng cũng có lợi thế của nó.

1. Sự trừu tượng là mạnh mẽ

Sức mạnh của sự trừu tượng được cung cấp bởi lập trình chức năng là mạnh mẽ đáng kinh ngạc. Nếu chúng ta viết một loạt các chức năng thuần túy, chúng ta có thể tận dụng tính minh bạch tham chiếu để trừu tượng hóa và che giấu sự phức tạp. Chúng ta có thể bắt đầu làm mờ ranh giới giữa kết quả của một cuộc gọi hàm và giá trị đơn giản. Vào cuối ngày, nó không thực sự quan trọng, miễn là bạn biết giá trị được cho là gì.

Trừu tượng là sức mạnh lớn nhất của lập trình chức năng. Bạn có thể dựa vào cách thức hoạt động của các chức năng của bạn, để bạn có thể phóng to vấn đề và giải quyết một chức năng tại một thời điểm.

2. Nó vốn có song song

Nó có thể không rõ ràng ngay lập tức, nhưng lập trình chức năng cho vay tốt để lập trình song song. Ví dụ đơn giản nhất để chứng minh điều này là tưởng tượng ghép một bản đồ và giảm. Khi bạn ánh xạ trong danh sách, bạn có thể phân phối từng cuộc gọi của hàm cho một luồng/quy trình/máy tính khác nhau. Sau đó, bạn có thể có một cuộc gọi xử lý luồng/quy trình/máy tính riêng biệt giảm trên các kết quả hoặc thậm chí thiết lập nhiều luồng/quy trình/máy tính với mỗi lần làm việc trên một phần của việc giảm.

3. Nó dễ dàng kiểm tra/gỡ lỗi

Đối số nổi bật nhất có lợi cho lập trình chức năng là cách nó dễ dàng làm cho mã thử nghiệm và gỡ lỗi. Nếu chúng ta kết thúc với một loạt các mã chức năng, tất cả các chức năng nên được phân lập hoàn toàn. Điều đó rất đơn giản hóa thử nghiệm và gỡ lỗi.

Tìm một lỗi trở nên trực tiếp hơn nhiều khi bạn có thể xác định rõ ràng các đầu vào và đầu ra của một hàm. Với sự cô lập rõ ràng cho mỗi chức năng, nó cũng trở nên dễ dàng hơn rất nhiều để vượt qua các phụ thuộc bạn cần để kiểm tra. Sự cô lập này cung cấp cái nhìn sâu sắc hơn về những gì mà phá vỡ và đòi hỏi ít thời gian hơn để thử nghiệm một thành phần của hệ thống của bạn nhiều lần trong nhiều thử nghiệm phụ thuộc.

4. Phát triển nhanh hơn

Lý do này bị ảnh hưởng bởi ý kiến ​​và kinh nghiệm cá nhân của tôi, nhưng tôi tin rằng lập trình chức năng dẫn đến trải nghiệm phát triển nhanh hơn. Lập trình chức năng thúc đẩy bạn phá vỡ vấn đề của bạn thành các hành động có thể kết hợp nhỏ hơn. Tôi thấy dễ dàng hơn để hoàn thành từng hành động này trong chuỗi, thay vì song song. Bạn có thể dễ dàng xác định một hành động hơn là đã thực hiện trước khi chuyển sang trường tiếp theo.

Sự kết luận

Khi tất cả được nói và thực hiện, tôi nghĩ rằng những điểm mạnh của lập trình chức năng vượt xa những điểm yếu. Lập trình chức năng có rất nhiều ý nghĩa đối với phần lớn lập trình đa năng, nhưng bạn cần phải cẩn thận về những hạn chế của nó trong các lĩnh vực quản lý nhà nước và đầu vào/đầu ra.

Người giới thiệu

  • Trạng thái đột biến - Chống ngăn xếp
  • Ví dụ: Danh sách todo · Redux

Đây là bài viết thứ ba trong một chuỗi về lập trình chức năng:

  1. Lập trình chức năng là gì?
  2. Ý tưởng & hoa văn
  3. Khi nào & khi không sử dụng nó
  4. Ý tưởng thực hành và khám phá

Những nhược điểm của chức năng là gì?

Năm nhược điểm/nhược điểm của lập trình chức năng..
IO đầu vào/đầu ra (IO) dựa vào các tác dụng phụ, vì vậy nó vốn không có chức năng. ....
Đệ quy. ....
Vấn đề thuật ngữ. ....
Sự không chức năng của máy tính. ....
Khó khăn của lập trình trạng thái. ....
Trừu tượng là mạnh mẽ. ....
Nó vốn dĩ song song. ....
Nó dễ dàng kiểm tra/có thể gỡ lỗi ..

Những ưu điểm và nhược điểm của chức năng trong C là gì?

Ưu điểm của các chức năng trong C Chúng tôi có thể gọi các hàm C bất kỳ số lần nào trong một chương trình và từ bất kỳ nơi nào trong một chương trình. Chúng ta có thể theo dõi một chương trình C lớn dễ dàng khi nó được chia thành nhiều chức năng. Khả năng tái sử dụng là thành tựu chính của các chức năng C. Tuy nhiên, việc gọi chức năng luôn là một chi phí trong một chương trình C.We can call C functions any number of times in a program and from any place in a program. We can track a large C program easily when it is divided into multiple functions. Reusability is the main achievement of C functions. However, Function calling is always a overhead in a C program.

Những hạn chế của chức năng trong C là gì?

C Trình biên dịch chỉ xác định lỗi và không có khả năng xử lý các ngoại lệ.Nó không cung cấp sự bảo vệ.Nó cũng không có khả năng sử dụng lại mã nguồn.Nó sử dụng bộ ký tự ASCII chỉ có thể hỗ trợ 256 ký tự vì nó sử dụng 1 byte để thể hiện một ký tự.. It doesn't provide protection. It also doesn't feature re-usability of source code extensively. It uses ASCII character set which is only able to support 256 characters because it uses 1-byte to represent a character.

Các nhược điểm là gì lập trình chức năng là gì?

Nhược điểm của lập trình chức năng thuần túy..
Không có hiệu quả hoàn toàn chức năng chưa được sắp xếp từ điển hoặc thiết lập.....
Không có bảng băm yếu chức năng hoàn toàn.....
Không có bộ sưu tập đồng thời chức năng hoàn toàn.....
Hầu hết các thuật toán đồ thị trông tồi tệ hơn và chạy chậm hơn nhiều khi được viết theo kiểu FP ..