Thảo Luận - OOP Hay FP | Page 17 - VOZ

VOZ
  • Forums New posts
  • Latests Featured content New posts New profile posts Latest activity
  • pik.vn
Log in Register What's new
  • New posts
Menu Log in Register Install the app Install How to install the app on iOS

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
You are using an out of date browser. It may not display this or other websites correctly.You should upgrade or use an alternative browser. thảo luậnOOP hay FP
  • 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
Prev
  • 1
  • Go to page

    Go
  • 15
  • 16
  • 17
  • 18
  • 19
  • Go to page

    Go
  • 30
Next First Prev 17 of 30

Go to page

Go Next Last hikaruu

hikaruu

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. :baffle: Click to expand...
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 Thích Màu Hường

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. :go: hikaruu

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. :go: Click to expand...
cóng tay rồi à vinhomn

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

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 :gach: cugiametruyen85

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ả xjIzSG9.png Mình tưởng FP thì phải nói tới immutability, first class function, adt, monad các kiểu chứ yBBewst.png 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ả xjIzSG9.png Mình tưởng FP thì phải nói tới immutability, first class function, adt, monad các kiểu chứ yBBewst.png Click to expand...
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. Thích Màu Hường

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 đã. :doubt: 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

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ì:
  1. 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...).
  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.
Anh update lại cho hoàn chỉnh và tôi cực mong đợi anh implement tiếp phần 2 vì yêu cầu đề bài phần 2 sẽ đánh trực tiếp vào cái pure và immutable principle của FP, nếu a tiếp tục tuân thủ nguyên tắc này thì sẽ lộ ra nhiều chổ bất cập của FP và dĩ nhiên code sẽ dài hơn. :look_down: tandatcr2000

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ồi :LOL: post 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. 120850030_779908999521499_8770000497682202139_n.png 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) 120852393_1327805287566971_8252035008040883703_n.png Click to expand...
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? Last edited: Oct 12, 2020 soihoang

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ứ yBBewst.png Click to expand...
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ẽ launch :LOL:. À 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 :sexy_girl: .
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ỉ :D 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 :LOL: 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 Capture.PNG 49.4 KB · Views: 123
Last edited: Oct 13, 2020 hikaruu

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ới tandatcr2000

tandatcr2000

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ả. :embarrassed: 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

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 :rolleyes: 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

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ỉ :D 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 :LOL: 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...
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:
  1. 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.
  2. 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.
  3. 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.
Mình vẫn hóng code của bạn @tthixk để thấy rõ Pure functional programming là thế nào. Mình cũng đang thử code theo FP style bằng Python chắc lát show code cho mọi người xem thử. Last edited: Oct 13, 2020 Thích Màu Hường

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:
  1. Output không giống
  2. Không tách module ko thấy được phần nào chung, riêng.
  3. 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.
Screenshot 2020-10-13 115558.png Prev
  • 1
  • Go to page

    Go
  • 15
  • 16
  • 17
  • 18
  • 19
  • Go to page

    Go
  • 30
Next First Prev 17 of 30

Go to page

Go Next Last You must log in or register to reply here.

Similar threads

lapmaimoiduoccainick_voz thảo luận [CLB Crypto - 2026] Góc thảo luận cho ae trade Crypto
  • lapmaimoiduoccainick_voz
  • Jan 7, 2026
  • Kinh tế / Luật
Replies 14 Views 743 Thursday at 8:51 AM 123456789qw 123456789qw Hai Mùa Mưa Khoa học chỉ ra thông minh có thể là lý do khiến bạn độc thân lâu dài
  • Hai Mùa Mưa
  • Jan 21, 2026
  • Điểm báo
2 Replies 25 Views 2K Jan 22, 2026 taiwanshixisheng taiwanshixisheng Cheesee [Hoa Kỳ] Nhiều tài xế không hề hay biết khả năng thu thập dữ liệu của camera giao thông
  • Cheesee
  • Jan 19, 2026
  • Điểm báo
Replies 0 Views 149 Jan 19, 2026 Cheesee Cheesee QuynQuyn201 tuyển dụng [Võ Chí Công-HN] Nơi lựa chọn đúng nền văn minh cho BrSE Non-tech hoặc Tech - Offer 30-70M
  • QuynQuyn201
  • Jan 23, 2026
  • Tuyển dụng - Tìm việc
Replies 5 Views 531 Monday at 1:37 PM QuynQuyn201 QuynQuyn201 thất nghiệp Game Việt ‘giả lập tổ tiên’ gây sốt mạng xã hội
  • thất nghiệp
  • Jan 22, 2026
  • Điểm báo
Replies 12 Views 1K Jan 22, 2026 JRpropo J Share: Facebook X (Twitter) LinkedIn Reddit Pinterest WhatsApp Share Link

Thread statistics

Created Quynh 123, Sep 20, 2020 Last reply from HIL, Nov 19, 2025 Replies 593 Views 87,083

Share this page

Facebook X (Twitter) LinkedIn Reddit Pinterest WhatsApp Share Link
  • Forums
  • Học tập & Sự nghiệp
  • Lập trình / CNTT
Back Top

Từ khóa » Fp Và Oop