Thảo Luận - OOP Hay FP | Page 17 - VOZ
- Forums New posts
- Latests Featured content New posts New profile posts Latest activity
- pik.vn
- New posts
Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
- Forums
- Học tập & Sự nghiệp
- Lập trình / CNTT
- Thread starter Thread starter Quynh 123
- Start date Start date Sep 20, 2020
Các Voz Dev thuộc trường phái nào ?
-
OOP class ông đẻ ra class cha, class cha đẻ ra class con, class con đẻ ra class cháu....
Votes: 170 24.9% -
FP cần kết quả ? => gọi Function A. Cần lọc kết quả ? => Gọi Function B trong Function A.
Votes: 125 18.3% -
OOP với FP là cái quái gì ???
Votes: 99 14.5% -
Freestyle, ra kết quả là đc.
Votes: 290 42.4%
- Total voters 684
- 1
- …
Go to page
Go - 15
- 16
- 17
- 18
- 19
- …
Go to page
Go - 30
Go to page
Go Next Lasthikaruu
Senior Member
trgiangvp3 said: Anh này lì thế nhỉ. Đúng tư duy thợ code, chỉ biết làm theo thiết kế có sẵn. Giờ anh có thằng khách trả tiền để anh thiết kế hệ thống cho nó thì nó cũng chỉ mô tả theo hướng nghiệp vụ về input và output nó mong muốn, có cứt nó cho anh "file json data input" nhé, vì thằng khách hàng có khi nó đếch biết gì về code cả. Nếu anh thấy chưa rõ thì anh cũng chỉ có thể hỏi theo hướng nghiệp vụ chứ ko thể đòi "file json data input" được.vậy thì đơn giản quá rồi nó code trước dùng gì thì cứ theo đó làm đi , đang oop code thêm theo fp làm gì =]], tất nhiên cũng dc thôi nhưng mà rất dở hơiClick to expand...
Thích Màu Hường
Member
hikaruu said: rồi anh tao object customer từ đó, rồi in ra tôi xem nào =]] Click to expand...Anh cố tình thả bait để gây war hay ngu thật? Tôi hy vọng là cái thứ nhất. Lượn giùm cái.
hikaruu
Senior Member
Thích Màu Hường said: Anh cố tình thả bait để gây war hay ngu thật? Tôi hy vọng là cái thứ nhất. Lượn giùm cái.cóng tay rồi àClick to expand...
vinhomn
Đã tốn tiền
nói chuyện đúng kiểu lỳ lợm
) lý luận đòi data đúng chuẩn công nhân code ko bao h biết đến viết test là gì trgiangvp3
Member
hikaruu said: vậy thì đơn giản quá rồi nó code trước dùng gì thì cứ theo đó làm đi , đang oop code thêm theo fp làm gì =]], tất nhiên cũng dc thôi nhưng mà rất dở hơi Click to expand...Anh đang nói cái đéo gì vậy? Tốt nhất anh tự đọc lại các comment của anh từ đầu thread để nhớ lại nội dung đang được tranh luận là gì. Sau đó nếu có luận điểm gì thì mời trình bày để người khác phản biện. Nếu anh không có luận điểm gì về vấn đề đang được thảo luận thì xin anh im lặng cùng hóng với bọn tôi mà học hỏi. Đừng cố comment thêm vài câu ngu ngơ, vừa làm loãng thread vừa khoe cái lưng ra cho người khác xem đấy. N
ntlinh_nl92
Junior Member
Nhìn mấy thím war vui phết nhỉ, mình thì code theo OOP gần 3 năm mới động vào FP vì làm scala liên quan đến concurrent processing. Bản thân mình thấy cái gì cũng có ưu nhược thôi, FP phù hợp với multi thread vì nó phù hợp cho thread safe, còn OOP thì khỏi phải bàn. Mình thấy tùy bài toán cụ thể mà chọn cái nào hoặc chọn cả 2
cugiametruyen85
Senior Member
Mà kể cũng lạ, so sánh FP mà toàn đem typeclass rồi mớ HM type system của haskell ra. Vậy ra FP = Haskell à, mấy FP khác không có typeclass thì không phải là FP hả
Mình tưởng FP thì phải nói tới immutability, first class function, adt, monad các kiểu chứ
T tthixk
Member
cugiametruyen85 said: Mà kể cũng lạ, so sánh FP mà toàn đem typeclass rồi mớ HM type system của haskell ra. Vậy ra FP = Haskell à, mấy FP khác không có typeclass thì không phải là FP hảLời giải dùng only function ở đây nhưng có vẻ ko ai để ý https://voz.vn/t/oop-hay-fp.137397/post-4538671 đến đoạn sau tranh luận gì mà toàn so tính năng coi ngôn ngữ nào hỗ trợ đc cái lọ cái chai, chán chả buồn nói.Mình tưởng FP thì phải nói tới immutability, first class function, adt, monad các kiểu chứ
Click to expand...
Thích Màu Hường
Member
tthixk said: Lời giải dùng only function ở đây nhưng có vẻ ko ai để ý https://voz.vn/t/oop-hay-fp.137397/post-4538671 đến đoạn sau tranh luận gì mà toàn so tính năng coi ngôn ngữ nào hỗ trợ đc cái lọ cái chai, chán chả buồn nói. Click to expand...Chữ "này" của anh là cái link mà tôi ko biết, già cả rồi nhiều khi lướt Voz bằng đt ko thấy đâu, lần sau la lên nhé. Để xem đã.
L lyokha114
Junior Member
hikaruu said: vậy thì đơn giản quá rồi nó code trước dùng gì thì cứ theo đó làm đi , đang oop code thêm theo fp làm gì =]], tất nhiên cũng dc thôi nhưng mà rất dở hơi Click to expand...Thôi im mẹ mồm đi thằng đầu bò
Thích Màu Hường
Member
tthixk said: Lời giải dùng only function ở đây nhưng có vẻ ko ai để ý https://voz.vn/t/oop-hay-fp.137397/post-4538671 đến đoạn sau tranh luận gì mà toàn so tính năng coi ngôn ngữ nào hỗ trợ đc cái lọ cái chai, chán chả buồn nói. Click to expand...Bài của a có ý, tôi có thể thấy được cách làm này đúng theo tiêu chí của FP là pure và immutable. Thật sự đây là lời giải tôi mong đợi bên phía các bạn FP. Tuy nhiên, solution của anh tôi reject vì:
- Output không giống: cái này a update lại giùm vì để dễ so sánh 2 trường phái với các ngôn ngữ khác nhau, ít nhất output, format, structure phải giống. Cái này a xem lại mấy post trước của tôi. (đặc biệt là hàm Print step 1, step 2...).
- Phải phân tách module ra file riêng cho người ta thấy rõ luôn. Tôi nhìn vào, anh nhìn vào thì biết phần nào chung phần nào riêng, cái nào fixed, cái nào reuse chứ ng khác ko biết.
tandatcr2000
Junior Member
soihoang said: self.customized_print(); có tính là functional ko bác :v f# cũng tương tự nè, mình code trong lúc đợi ... build dự án nên code để máy công ty rồiChỗ này em hỏi chỗ này hàm print thay vì dùng một match (tương tự switch .. case), ta có thể dùng function pointer (hay delegate, lambda expression, em không biết F# gọi là gì) để lưu trữ hàm print tương ứng không. Làm như vậy có vi phạm nguyên lý gì của FP không. Với bác có thể cho em xin link tài liệu của ảnh dưới để tham khảo thêm không? Last edited: Oct 12, 2020post tạm cái hình. Làm như cách của c# interface kiểu customer.printOtherInfo cũng được nhưng mình ... ko thích làm, làm demo cho mọi người coi thôi. Ai tò mò muốn biết fp thế nào thì cứ lập thread hỏi, mình biết gì thì hỗ trợ náy chứ cũng ko máu hơn thua, vì làm cho tới nơi thì mất công mà mình lại lười.
chổ cái Test mình viết thêm cho mọi người thấy là ko cần thêm type Test = ...., mấy cái khác là viết cho ai ko quen với du(discriminated unions)
Click to expand...
soihoang
Member
cugiametruyen85 said: Mình tưởng FP thì phải nói tới immutability, first class function, adt, monad các kiểu chứthì tranh luận mạng mà, nó thường trả đi tới đâu và bị bẻ đi nhiều hướng ko kiểm soát được nếu ko có ai đứng ra làm moderator. Mình còn ở voz thì sẽ còn đi theo chủ đề này, vẫn đang nghiên cứu viết tài liệu, làm ví dụ để làm blog đây, hi vọng năm sau sẽ launchClick to expand...
. À mà có bác nào ở hn, mình ở đà nẵng nhưng hay ra hn, nếu không ngại thì hẹn dịp nào gặp nhau tranh luận, live coding cho nó máu
. tandatcr2000 said: Chỗ này em hỏi chỗ này hàm print thay vì dùng một match (tương tự switch .. case), ta có thể dùng function pointer (hay delegate, lambda expression, em không biết F# gọi là gì) để lưu trữ hàm print tương ứng không. Làm như vậy có vi phạm nguyên lý gì của FP không. Với bác có thể cho em xin link tài liệu của ảnh dưới để tham khảo thêm không? Click to expand...có phải ý bạn muốn nói là "inject" hàm printOtherInfo vào parameter của hàm print phải ko ?. Nếu đúng thì đó là "dependency injection" trong fp, còn nó có phá vỡ nguyên lý hay ko thì mình ... vẫn tìm hiểu, về nguyên tắt là ko kiểm soát được. Dùng những thằng strict thì nó sẽ phải kĩ hơn(bằng type signature để biết được nó có tạo side effect hay ko). Còn đoạn kia mình trích trong cuốn này. Real-World Functional Programming Vấn đề đang nói người ta cũng bàn nát rồi. Expression problem được nêu lên bởi Philip Wadler, một nhân vật cực kì nổi tiếng trong cộng đồng haskell, cũng là ngươi đóng góp lớn cho generic của Java, cùng với Martin Odersky(creator của Scala). Lan mam một chuyện cũng tình cờ là người đưa generic vào C#(2.0) là Don Syme, creator của F#. https://vkontech.com/clash-of-styles-part-3-extensibility-via-oop-and-fp/ Last edited: Oct 13, 2020 N
ngkhoahoang
Junior Member
@Thích Màu Hường Ok lời giải của bài của mình viết bằng cả Haskell và Rust đây nhé: https://github.com/clitetailor/functional-challenges/tree/main/vehicle Còn đây là lời giải cho bài của bạn viết bằng Haskell: https://github.com/clitetailor/functional-challenges/pull/1/files Không biết như vậy là đã đủ thỏa mãn nguyện vọng của bạn chưa nhỉ
Không biết tiếp theo bạn có muốn dd luôn không để mình còn challenge tiếp
P/s: Mình chỉ đổi lại cú pháp export của file Visualizer.hs và thêm kiểu dữ liệu trong file CustomerVisualizer.hs chứ không xóa hay sửa cái gì nguy hiểm đâu nên bạn đừng có sợ đó nhé. Còn nếu bạn sợ thì bạn có thể bảo mình mình sẽ bạn như ý luôn
Edit: Lời giải lần 1 của mình có chút sai sót, mình vừa update lại ảnh nhé :3 Attachments
-
Capture.PNG 49.4 KB · Views: 123
hikaruu
Senior Member
https://repl.it/repls/FairWarmObjectcode#index.js code đây ,mấy bác Vô trang trên mà code cho mọi người run share dc vớitandatcr2000
Junior Member
soihoang said: có phải ý bạn muốn nói là "inject" hàm printOtherInfo vào parameter của hàm print phải ko ?. Nếu đúng thì đó là "dependency injection" trong fp, còn nó có phá vỡ nguyên lý hay ko thì mình ... vẫn tìm hiểu, về nguyên tắt là ko kiểm soát được. Dùng những thằng strict thì nó sẽ phải kĩ hơn(bằng type signature để biết được nó có tạo side effect hay ko Click to expand...Ý mình là trong các type thêm vào một field giữ function pointer (delegate,...) của hàm print (phần nào giống virtual table). Code: type Customer = {Name: String; Age: int; PrintBehaviour: delegate} Cái này sẽ khá tương tự OOP khi nhét hàm vào trong kiểu dữ liệu (vào object) và tính đa hình (polymorphism, cái này là vấn đề bắt buộc của mọi paramdigm, không riêng gì OOP hay FP) sẽ giống virtual function của OOP (virtual table là "backend" của virtual function và virtual class). Tuy nhiên theo mình hiểu FP thì hàm có thể là kiểu dữ liệu và có thể có các biến mang giá trị là hàm thực thi (dependency injection như thím nói?) nên mình mới hỏi là việc này có chấp nhận được trong FP và nó vi phạm gì tính chất của FP không?
soihoang said: Còn đoạn kia mình trích trong cuốn này. Real-World Functional Programming Click to expand...Thanks thím
soihoang said: Lan mam một chuyện cũng tình cờ là người đưa generic vào C#(2.0) là Don Syme, creator của F#. Click to expand...Cũng không hẳn là tình cờ khi C# và F# đều từ lò M$ ra cả.
R rosario_1
Senior Member
hikaruu said: https://repl.it/repls/FairWarmObjectcode#index.js code đây ,mấy bác Vô trang trên mà code cho mọi người run share dc với Click to expand...Đúng như mình nghĩ code thế này mà nhiều loại object thì tha hồ hốt rác lúc maintain. Vì không kế thừa nên không biết object nào vào object nào, chung riêng ra làm sao, cho nên dùng hard code để phân biệt giữa các object thằng nào là Vip, thằng nào là internal v.v... Giờ nó mà thêm 1 loại superVip kế thừa từ Vip thì không những phải viết logic map function cho thằng SuperVip mới này mà logic map cũ cho thằng Vip cũng sẽ không còn đúng nữa sẽ lại phải viết lại. Vài lần như thế là sẽ thành cái đống hổ lốn bùi nhùi if else, giống giống khác khác, đọc hiểu được ngay chết liền. Được cái bù lại là dù mấy thằng đầu tiên làm nát thế nào thì vẫn có khả năng fix được, chỉ tội sẽ rất mệt thôi.
soihoang
Member
tandatcr2000 said: Code: type Customer = {Name: String; Age: int; PrintBehaviour: delegate} Cái này sẽ khá tương tự OOP khi nhét hàm vào trong kiểu dữ liệu (vào object) và tính đa hình (polymorphism, cái này là vấn đề bắt buộc của mọi paramdigm, không riêng gì OOP hay FP) sẽ giống virtual function của OOP (virtual table là "backend" của virtual function và virtual class). Click to expand...cách này giống module system của ocaml rồi, mà ocaml là Objective Caml https://reasonml.github.io/docs/en/module, https://rescript-lang.org/docs/manual/latest/module (đọc doc reasonml/rescript cho dể :v) trong lisp sẽ có CLOS, là cái ở defmulti ở clojure(có kể thừa :v) https://clojure.org/reference/multimethods ngoài ra có luốn defprotocol giống interface, mà elixir học cái này từ clojure
nói chung ưu tiên của mình giờ tìm hiểu dần dần nhiều cái để có cái nhìn tổng quát nhiều mặt hơn là tập trung giải quyết vấn đề
Last edited: Oct 13, 2020 Thích Màu Hường
Member
ngkhoahoang said: @Thích Màu Hường Ok lời giải của bài của mình viết bằng cả Haskell và Rust đây nhé: https://github.com/clitetailor/functional-challenges/tree/main/vehicle Còn đây là lời giải cho bài của bạn viết bằng Haskell: https://github.com/clitetailor/functional-challenges/pull/1/files Không biết như vậy là đã đủ thỏa mãn nguyện vọng của bạn chưa nhỉMình accept solution của bạn mặc dù có sửa bên module Visualizer. Cái này chỉ là lỗi thiết kế ban đầu, nó không ảnh hưởng tới bản chất đề bài. (nhưng mà project thực tế thì sẽ phải trả giá đấy). Solution của bạn implement theo cách thiết kế như bên OOP, cái khác ở đây chỉ là thay cho kế thừa, và override bằng cách tạo ra một "adapter" để liên kết 1 cấu trúc dữ liệu cụ thể với các function làm việc trên cục data đó. Thằng Haskell thì nó có feature như vậy, các ngôn ngữ khác thì không biết thế nào, có lẽ là pattern matching. Thật sự qua 2 bài thì mình thấy khác biệt cơ bản của FP vs OOP là ở những chổ sau:Không biết tiếp theo bạn có muốn dd luôn không để mình còn challenge tiếp
P/s: Mình chỉ đổi lại cú pháp export của file Visualizer.hs và thêm kiểu dữ liệu trong file CustomerVisualizer.hs chứ không xóa hay sửa cái gì nguy hiểm đâu nên bạn đừng có sợ đó nhé. Còn nếu bạn sợ thì bạn có thể bảo mình mình sẽ bạn như ý luôn
Edit: Lời giải lần 1 của mình có chút sai sót, mình vừa update lại ảnh nhé :3 Click to expand...
- Pure and immutable: cái này nếu tuân thủ nguyên tắc thì bên FP sẽ phải copy ra object mới mổi khi thay đổi trạng thái (update as copy). Cái này theo mình là trái với vạn vật tự nhiên. Vì như ngoài đời khi người ta nhấn 1 cái nút trên thiết bị nào đó ví dụ như bóng đèn. Cái bóng đèn đó chuyển trạng thái từ tắt sang mở. Hay 1 customer được promote lên VipCustomer thì chỉ thêm VipPoints. Bóng đèn hay customer là cùng 1 object, nó chỉ thay đổi trạng thái theo từng giai đoạn chứ không copy ra 1 instance mới như FP. FP làm vậy chỉ để cache và support multi threads và mình nghĩ nó chỉ có lợi ở trường hợp đó thôi.
- Encapsulation: điểm mạnh của OOP là đóng gói data và method nó là obj.method(), còn FP là output = f(input), mặc dù FP tách data và method ra nhưng thực tế vẫn cần sự liên kết giữa data và method. Bởi vậy các ngôn ngữ FP đẽ ra TypeClass, pattern matching để thể hiện kiểu data nào đi với method nào.
- Inheritance: Việc không có kế thừa bên FP sẽ bắt buộc các bạn FP tổ chức code theo kiểu composition cả về mặt data và method. Ví dụ về data structure, cái phần chung là BasicInfo phải là 1 struct con của 3 loại customer type. Về kế thừa và override method, các bạn làm FP sẽ phải lồng ghép các function với nhau, ví dụ custom_print_logger => custom_print_masker => custom_print_customer ==(pattern matching)==> real_custom_print_for_specific_customer_type() Cái này một số ngôn ngữ hỗ trợ FP sẽ gọi nó bằng cái tên mỹ miều là Higher Order Function trong khi bên OOP tất cả những hàm print kia đã được tự động gọi do kế thừa và nó được phân biệt bằng type của object. Nếu ai để ý trong bài giải bằng code C# của mình thì mình dùng Decorator pattern chổ masker và logger để vừa dùng composition và vừa dùng inhertiance để override cái hàm CustomPrint như vậy cái chuỗi hàm print đã nói ở trên được tự động gọi trong step 2 của hàm Print khi chạy rồi.
Thích Màu Hường
Member
hikaruu said: https://repl.it/repls/FairWarmObjectcode#index.js code đây ,mấy bác Vô trang trên mà code cho mọi người run share dc với Click to expand...Bài của anh tôi reject vì không đáp ứng yêu cầu đề bài:
- Output không giống
- Không tách module ko thấy được phần nào chung, riêng.
- Logic hàm Print đang hard code, không reuse được và đang tight couple với customer type. Tôi muốn dùng hàm Print in thông tin Vozer, in hóa đơn, in employee, in cái mịe gì khác thì tôi bó tay do anh đang hard code.
- 1
- …
Go to page
Go - 15
- 16
- 17
- 18
- 19
- …
Go to page
Go - 30
Go to page
Go Next Last You must log in or register to reply here.Similar threads
- lapmaimoiduoccainick_voz
- Jan 7, 2026
- Kinh tế / Luật
- Hai Mùa Mưa
- Jan 21, 2026
- Điểm báo
- Cheesee
- Jan 19, 2026
- Điểm báo
- QuynQuyn201
- Jan 23, 2026
- Tuyển dụng - Tìm việc
- thất nghiệp
- Jan 22, 2026
- Điểm báo
Thread statistics
Created Quynh 123, Sep 20, 2020 Last reply from HIL, Nov 19, 2025 Replies 593 Views 87,083Share this page
Facebook X (Twitter) LinkedIn Reddit Pinterest WhatsApp Share Link- Forums
- Học tập & Sự nghiệp
- Lập trình / CNTT
Từ khóa » Fp Và Oop
-
Sự Khác Nhau Giữa Functional Programming Và OOP
-
BÀN VỀ FUNCTIONAL PROGRAMMING VÀ OOP ... - Đào Hải Nam
-
OOP Vs Functional Programming: What's The Difference?
-
Functional Programming VS Object Oriented Programming (OOP ...
-
How Would You Explain FP Vs OOP To A Layman? - Quora
-
When Is OOP Better Than FP And Vice-versa? - Quora
-
Functional Programming Vs OOP | Top 8 Useful Differences To Know
-
When FP? And When OOP?
-
Difference Between Functional Programming And Object Oriented ...
-
How Is Functional Programming Different From Object-Oriented?
-
Tạm Biệt, Object Oriented Programming. - Viblo
-
Object Oriented Programming Vs Functional Programming Explained
-
FP Is The New OOP - YouTube
-
Functional Programming Vs OOP: Comparing Paradigms
Click to expand...
chổ cái Test mình viết thêm cho mọi người thấy là ko cần thêm type Test = ...., mấy cái khác là viết cho ai ko quen với du(discriminated unions)
Click to expand...