386: Xem lại các đối tượng giá trị: Phiên bản `Tally` - Nhà để xe đạp (2023)

Nếu bạn đang tìm mua quần đùi đi xe đạp, thì Joël đã có bạn. Stephanie vừa trở về từ RubyKaigi ở Nhật Bản và chia sẻ chi tiết về chuyến đi của mình.

Gần đây tại thinkbot, đã có những cuộc trò chuyện xung quanh một bài tập mô hình hóa dữ liệu thú vị. Joël và Stephanie thảo luận những điều sau:

Đối tượng giá trị so với Băm

Làm Toán về Hợp Số

Monoids và Folding

Các khái niệm đặt tên trong mã

Tập phim này được mang đến cho bạn bởiphanh khí. Truy cập theo dõi lỗi Frictionless và thông tin chi tiết về hiệu suất cho ngăn xếp ứng dụng của bạn.

Ruby Kaigi

Ống kính Google Dịch

Video về công viên thành phố

Có thể đếm được # kiểm đếm

Băm # hợp nhất

đơn sắc

Vô số#tất cả?

Giá trị của từ vựng chuyên ngành

Ý chính với giải pháp mã của Joël

Bảng điểm:

STEPHANIE: Xin chào và chào mừng bạn đến với một tập khác của The Bike Shed, một podcast hàng tuần từ những người bạn của bạn tại thinkbot về việc phát triển phần mềm tuyệt vời. Tôi là Stephanie Minn.

JOËL: Và tôi là Joël Quenneville. Và cùng nhau, chúng ta ở đây để chia sẻ một chút những gì chúng ta đã học được trên đường đi.

STEPHANIE: Vậy, Joël, có gì mới trong thế giới của bạn?

JOËL: Tôi đã thực hiện một giao dịch mua bất thường trong tuần này. Tôi đi ra ngoài và mua một chiếc quần đùi đi xe đạp. Và, đối với những người không biết, đây là những chiếc quần đùi đặc biệt có đệm tích hợp bên trong. Thông thường, chúng giống như bó sát da, nhưng tôi đoán, tôi có cái gọi là quần đùi đạp xe leo núi. Vì vậy, chúng trông giống như vết cắt của một chiếc quần short bình thường. Nhưng họ có cái này, giống như đệm tích hợp để đạp xe.

STEPHANIE: Vậy. Để xác nhận, bạn đã mua những chiếc quần đùi này để đạp xe phải không?

JOËL: Vâng. Tôi đã mua những chiếc quần đùi này cho mục đích đạp xe.

STEPHANIE: Được rồi. [cười]

JOËL: Và tôi có được những thứ này vì tôi đang nói chuyện với một người bạn về điều này và nói rằng đây có lẽ là điều tham vọng nhất mà tôi từng làm trong đời. Và họ khuyến nghị nếu bạn chưa thực hiện quần đùi đi xe đạp, bạn thực sự nên lấy chúng. Họ tạo ra một sự khác biệt lớn.

STEPHANIE: Chà. Được rồi, tôi có hai suy nghĩ ở đây. Trước hết, bạn đã nói trước điều này rằng đây là một giao dịch mua bất thường. Vì vậy, tôi nghĩ có thể bạn đã mua những chiếc quần đùi đi xe đạp này vì một số mục đích khác. [cười] Nhưng tôi rất hào hứng khi nói về điều này bởi vì tôi cũng tò mò về việc thử mặc quần đùi đi xe đạp.

Tôi đạp xe rất nhiều ở Chicago vào mùa hè, và tôi đã thực hiện những chuyến đi dài hơn trên đường mòn Lakefront. Và một trong những mục tiêu của tôi, thực ra, vào mùa hè này là thực hiện một chuyến đi bằng xe đạp. Nhưng tôi đã không cảm thấy thoải mái khi đi những chuyến đi dài hơn. Và tôi chỉ nghĩ rằng đây có thể là một điều gì đó thực sự hữu ích để làm cho chúng thú vị hơn một chút.

JOËL: Vì vậy, loại xe đạp mà bạn đang thực hiện gần giống với những gì có thể được coi là đi làm?

STEPHANIE: Vâng, chủ yếu là đi lại. Nhưng ngoài ra, giống như, thực hiện các chuyến đi dài vào cuối tuần, thêm vào đó, hy vọng rằng, chuyến đi đạp xe sắp tới đến công viên tiểu bang. Vì vậy, không quá dài, có thể là 60 dặm, nhưng chắc chắn là đủ dài để bạn bắt đầu cảm thấy hơi khó chịu khi ngồi trên ghế.

JOËL: Yeah, là 60 dặm, giống như, trong một ngày?

STEPHANIE: Vâng, chính xác.

JOËL: Đó là rất nhiều. Vâng, người bạn giới thiệu quần đùi đi xe đạp cho tôi đã nói với tôi rằng gần như bất cứ thứ gì có lẽ trên 10 dặm đều đáng để mặc quần đùi.

(Video) Ai thấy tui ko?? #cuongjin #tiktok

STEPHANIE: Chà, được thôi. Rõ ràng là tôi đã đau khổ [cười] quá lâu rồi. Hãy cho tôi biết thêm về chuyến đi xe đạp của bạn.

JOËL: Vì vậy, đây là một chuyến đi xe đạp cộng với bia. Về cơ bản, tôi đã vẽ sơ đồ một loạt các nhà máy bia ở Bỉ trên bản đồ và xây dựng một hành trình có thể đến được nhiều nhà máy bia trong khi vẫn duy trì các chuyến đi khá ngắn giữa các thị trấn. Và mục tiêu là có thể đi được 30-35 dặm trong một ngày. Và vì vậy tôi có thể sẽ đi, chẳng hạn như đạp xe vào buổi sáng, sau đó khám phá và uống rượu vào buổi chiều và buổi tối.

STEPHANIE: Điều đó nghe thật tuyệt vời. Thật tuyệt khi thực hiện một chuyến tham quan khu vực và sau đó đi du lịch bằng xe đạp.

JOËL: Vâng, tôi rất phấn khích vì các phương thức vận tải khác thực sự chỉ cung cấp cho bạn điểm xuất phát và điểm đến, trong khi đi xe đạp, bạn gần như có được tất cả các địa điểm ở giữa. Bạn sẽ có cảm giác tốt hơn nhiều về khu vực mà bạn đang ở. Và bạn có thể thực hiện tất cả các điểm dừng bất ngờ này nếu muốn. Bạn có thể đi đường vòng. Vì vậy, tôi cảm thấy như bạn có được kiểu tồn tại trong thời điểm này, ở vị trí mà bạn sẽ có với tư cách là một người đi bộ nhưng với thời gian trị vì lâu hơn nhiều.

STEPHANIE: Vâng, chắc chắn rồi. Đó chính xác là những gì tôi định nói. Tôi thích đi xe đạp. Và có điều gì đó thực sự đặc biệt khi bạn có thể hiện diện ở xung quanh và nhìn thấy mọi người trên đường phố hoặc một tòa nhà tuyệt đẹp khi bạn đang đi. Nhưng cũng đi với tốc độ mà bạn cảm thấy rất thú vị và rất tự do khi chỉ đạp xe qua một thị trấn và dừng lại khi bạn muốn, và di chuyển những quãng đường dài hơn bạn có thể đi bộ.

JOËL: Vì vậy, tôi vừa nhận được những chiếc quần đùi đi xe đạp này ngày hôm qua qua đường bưu điện. Vì vậy, hôm nay, vào cuối ngày, tôi sẽ đạp xe ra ngoài và tôi sẽ xem liệu họ có hoạt động như quảng cáo hay không.

STEPHANIE: Thật thú vị. Hãy cập nhật cho chúng tôi [cười] nếu bạn có thích chúng hay không.

JOËL: Vâng, vâng. Một hoặc hai tập tiếp theo, tôi sẽ phải báo cáo quần đùi đi xe đạp; vâng hay không?

STEPHANIE: Vâng, Bike Shed giờ sẽ trở thành nơi đánh giá thiết bị xe đạp.

JOËL: Cái tên sẽ thực sự phù hợp, sau đó với những gì mọi người tìm kiếm trên Google, nó có thể nghĩ rằng nó thực sự là như vậy. Stephanie, có gì mới trong thế giới của bạn?

STEPHANIE: Nói về kỳ nghỉ, bản thân tôi vừa trở về sau chuyến du lịch kéo dài hai tuần rưỡi. Tôi nghĩ rằng tôi đã đề cập trên podcast một vài tập trước đây rằng tôi đang đi du lịch đến Nhật Bản để tham dự RubyKaigi, một Hội nghị Ruby quốc tế tại Nhật Bản. Và sau đó tôi đã dành một tuần nữa ở Đài Loan, chỉ trong thời gian của riêng tôi. Vì vậy, vâng, tôi đã có một chuyến đi thực sự lớn, dài, và nó thực sự tuyệt vời. Đây là lần đầu tiên tôi ra nước ngoài sau một thời gian dài. Đây là lần đầu tiên tôi đến một nơi mà tôi không nói được ngôn ngữ đó.

Vì vậy, ở Nhật Bản...tôi không nói được tiếng Nhật nào. Và nó vừa thách thức vừa không quá tệ. Tôi tìm đường xung quanh thông qua rất nhiều cử chỉ và mỉm cười, và gật đầu. [cười] Và, hy vọng, mọi người có thể hiểu những gì tôi đang cố gắng truyền đạt. Ngoài ra, khi chỉ vào thực đơn, tôi thực sự khuyên bạn nên đến những nơi có hình ảnh của món ăn, và sau đó bạn có thể chỉ vào khi bạn muốn gọi món. [cười]

JOËL: Vì vậy, bạn có thấy rằng tiếng Anh không đặc biệt hữu ích khi ở Nhật Bản với tư cách là một khách du lịch?

STEPHANIE: Vâng, tôi sẽ nói như vậy. Điều tiếp theo là hầu hết các dấu hiệu đã được dịch. Vì vậy, cuối cùng chúng tôi đã sử dụng phương tiện giao thông công cộng rất nhiều. Và điều đó khá dễ điều hướng, đặc biệt là vì tôi đã từng điều hướng tàu điện ngầm ở các thành phố khác trước đây và việc đọc các biển báo không có vấn đề gì. Nhưng khi bạn đang cố gắng giao tiếp với người dân địa phương, điều đó khó hơn một chút.

JOËL: Bạn có sử dụng bất kỳ ứng dụng nào, chẳng hạn như, trên điện thoại của mình hoặc bất kỳ ứng dụng nào tương tự để giúp điều hướng loại ngôn ngữ khác nhau không?

STEPHANIE: Vâng, ứng dụng Google Translate Lens. Tôi không thể nhớ chính xác nó là gì. Nhưng đây là lần đầu tiên tôi thực sự sử dụng nó. Và tôi thực sự ấn tượng bởi cách nó có thể dịch những thứ mà bạn đang sử dụng máy ảnh của mình để chụp ảnh, hoặc đơn giản là cho phép bạn xem máy ảnh. Tôi đã cảm thấy hơi ngớ ngẩn, chẳng hạn như cầm điện thoại của mình lên mọi thứ và cố gắng [cười]... để tôi có thể hiểu những gì mình đang đọc. Nhưng đối với các menu không có hình ảnh, đó là chiến lược dự phòng của tôi. [cười]

JOËL: Bạn đã bao giờ phải để điện thoại của mình dịch một thứ gì đó và sau đó chỉ đưa điện thoại của mình cho người khác xem chưa?

STEPHANIE: Không, tôi không cần phải đi xa đến thế. Mặc dù tôi nghĩ rằng nó có một tính năng mà bạn có thể yêu cầu ai đó nói vào điện thoại và nó sẽ dịch điều đó sang ngôn ngữ mẹ đẻ của bạn. Và sau đó bạn trả lời bằng cách nói vào đó và sau đó phát âm thanh cho họ nghe, bạn biết đấy, tôi cá là thực sự hiệu quả trong tình thế khó khăn. Nhưng tôi nghĩ điều đó cần đầu tư nhiều hơn một chút vào sự tương tác [cười] với người khác so với mức tôi sẵn sàng. Như tôi đã nói, cử chỉ phục vụ tôi khá tốt.

JOËL: Tôi đã có kinh nghiệm ở phía bên kia của điều đó một thời gian trước. Vì vậy, ở Boston, tôi vừa đi bộ xuống phố, và ai đó đã chặn tôi lại và giơ điện thoại của họ lên. Và họ đã gõ một cái gì đó bằng tiếng Trung Quốc trên đó. Và họ nhấn một nút, và nó xuất hiện bằng tiếng Anh.

STEPHANIE: [cười]

JOËL: Và họ đang hỏi đường. Và tôi nghĩ rằng tôi đã gõ lại một câu bằng tiếng Anh trên điện thoại của họ, sau đó họ nhấn nút dịch và nhận lại bằng tiếng Trung. Chúng tôi đã đi đi lại lại vài lần. Và cuối cùng, tôi nghĩ anh ấy đã có được thứ mình muốn, và chúng tôi đường ai nấy đi. Và tôi đã rất ngạc nhiên rằng toàn bộ sự tương tác này đã xảy ra.

STEPHANIE: Vâng, điều đó thực sự tuyệt vời.

JOËL: Yeah, khen ngợi người đó vì đã can đảm chặn ai đó trên đường khi bạn không nói được ngôn ngữ của họ.

STEPHANIE: Vâng, chắc chắn rồi. Tôi nghĩ ngay cả khi tôi gặp khó khăn trong việc giao tiếp với ai đó vì rào cản ngôn ngữ, tôi có thể biết từ cử chỉ đáp lại của họ rằng chúng tôi dường như sẵn sàng giúp đỡ lẫn nhau. Và điều đó, giống như, vẫn có khả năng tìm thấy một loại kết nối nào đó, mặc dù, bạn biết đấy, chúng tôi không hoàn toàn hiểu nhau. Và đó chắc chắn là một điều mà tôi thực sự thích khi được ở một nơi, bạn biết đấy, những người khác với tôi và được tiếp xúc với điều đó. Đã lâu lắm rồi tôi mới được trải nghiệm điều đó, và điều đó thực sự có giá trị.

JOËL: Vì vậy, ngoài hội nghị, bạn sẽ nói gì về một số điểm nổi bật của chuyến đi đối với bạn, có thể là một từ Nhật Bản và một từ Đài Loan?

STEPHANIE: Vì vậy, một trong những điều yêu thích của tôi khi ở Tokyo là không gian xanh xung quanh. Cuối cùng tôi đã đi bộ rất nhiều chỉ để khám phá các khu phố. Và tôi luôn tình cờ bắt gặp một công viên địa phương hoặc thậm chí là một ngôi đền có thiên nhiên thực sự tuyệt vời xung quanh nó, rất nhiều cây to. Bạn biết đấy, một số, chẳng hạn như các đặc điểm của nước, có thể như một cái ao, và rất nhiều loại cây thực sự thú vị mà tôi đã tìm hiểu.

Và vâng, điều đó thực sự tuyệt vời, đặc biệt là trong một khu vực đô thị dày đặc như vậy, giống như, đi ngang qua không gian xanh để chỉ ngồi một lúc. Và đó là một sự giải thoát tuyệt vời khỏi mật độ và sự bận rộn của một thành phố lớn. Đó chỉ là một điều mà tôi thực sự ấn tượng khi ở Nhật Bản.

JOËL: Điều đó thật tuyệt. Tôi nghĩ điều đó thực sự nói lên chất lượng quy hoạch đô thị của họ. Tôi biết định kiến ​​về Tokyo mà tôi có trong đầu là nó, bạn biết đấy, cực kỳ hiện đại, cực kỳ đô thị, bạn biết đấy, đó là thành phố lớn nhất thế giới. Vì vậy, ý tưởng rằng họ đã dành thời gian để thiết lập tất cả những công viên nhỏ này ở khắp mọi nơi thực sự đáng yêu.

Đặc biệt, tôi nghĩ ý tưởng về những công viên nhỏ hơn ở cấp khu phố nơi bạn không cần, bạn biết đấy, thứ gì đó đồ sộ như, giả sử, Công viên Trung tâm của New York, bạn biết đấy, thực sự rất tuyệt. Nhưng chỉ cần có một chút không gian xanh trong khu phố nơi bạn có thể ghé qua, tôi nghĩ đó là một sự nâng cấp tuyệt vời cho chất lượng cuộc sống của người dân địa phương.

Gần đây, tôi đã nghe một video trên YouTube từ một kênh quy hoạch thành phố nói về tất cả những suy nghĩ đằng sau các công viên thành phố và việc đặt chúng ở các quy mô khác nhau cũng như tác động của điều đó đến cư dân của các khu vực khác nhau. Vì vậy, thật tuyệt khi biết rằng Tokyo đã làm rất tốt điều đó.

STEPHANIE: Vâng, chắc chắn rồi. Tôi nghĩ một phần của niềm vui khi tình cờ tìm thấy nó là bạn biết đấy, ngay cả khi tôi không tìm kiếm nó, nó vẫn xuất hiện trong những chuyến đi bộ của tôi. Và, vâng, nó thực sự rất sảng khoái.

JOËL: Còn Đài Loan thì sao?

(Video) Làm Chủ Tư Duy Kinh Doanh Và Chiến Lược Sản Xuất, Kinh Doanh Ngành Hàng Nông Sản, Thực Phẩm FULL

STEPHANIE: Vì vậy, ở Đài Loan, điều tôi thực sự thích về nó là một hòn đảo nhỏ hơn. Và vì vậy bạn thực sự có thể đến nhiều nơi trong vòng vài ngày. Và rất nhiều người thực hiện các chuyến đi trong ngày đến bờ biển từ Đài Bắc. Và tôi đã có thể thực hiện một chuyến đi hai ngày đến một quận khác có một số suối nước nóng, và tôi được tận hưởng suối nước nóng ngoài trời dưới mưa. Và điều đó thực sự tốt vì nó giống như được bao quanh bởi cây cối.

Và tình cờ trời mưa vào sáng hôm đó, nhưng, bạn biết đấy, tất cả chúng tôi đều đã bị ướt, nên điều đó không thực sự quan trọng. Và nó giống như, trải nghiệm thực sự thanh thản và tuyệt đẹp này khi có thể tận hưởng điều đó. Và tôi nghĩ đó là một nơi khác mà tôi đã ở trong một khu đô thị, và sau đó có thể thoát ra ngoài một chút thì thực sự rất tuyệt.

JOËL: Điều đó nghe giống như một khoảnh khắc kỳ diệu. Bạn đã từng đến suối nước nóng bao giờ chưa, hay đây là lần đầu tiên bạn đến suối nước nóng?

STEPHANIE: Trước đây tôi đã từng đến một vài nơi ở Hoa Kỳ. Tôi thích đi du lịch đường bộ đến công viên quốc gia. Và cũng có một số suối nước nóng thực sự tuyệt vời ở Mỹ. Và vì vậy đây là điều mà tôi thực sự muốn làm ở một nơi khác chỉ để trải nghiệm nó ở nơi khác. Và, vâng, tôi thực sự vui mừng vì đã đánh dấu điều đó ra khỏi danh sách việc cần làm của mình.

JOËL: Điều đó thật tuyệt. Tôi chưa bao giờ đến suối nước nóng, và nó có vẻ là một điều thú vị để làm. Vì vậy, nó nằm trong danh sách xô lớn hơn của tôi. Đó có thể không phải là điều nằm trong top 5 việc cần làm, nhưng chắc chắn, điều mà tôi muốn làm vào một ngày nào đó.

STEPHANIE: Tuyệt. Yêu nó. Đó là cuộc nói chuyện về kỳ nghỉ của Joël và Stephanie. [cười]

QUẢNG CÁO GIỮA CUỘN:

Lỗi gỡ lỗi có thể là cơn ác mộng tồi tệ nhất của nhà phát triển... nhưng không nhất thiết phải như vậy. Airbrake là một công cụ theo dõi lỗi, hiệu suất và theo dõi triển khai từng đoạt giải thưởng do các nhà phát triển tạo ra cho các nhà phát triển, công cụ này thực sự có thể giúp giảm một nửa thời gian gỡ lỗi của bạn.

Vậy tại sao các nhà phát triển lại yêu thích Airbrake? Nó có tất cả thông tin mà các nhà phát triển web cần để giám sát ứng dụng của họ - bao gồm quản lý lỗi, thông tin chi tiết về hiệu suất và theo dõi triển khai!

Công cụ sửa lỗi của Airbrake nắm bắt tất cả lỗi dự án của bạn, nhóm chúng một cách thông minh và chỉ cho bạn vấn đề trong mã để bạn có thể nhanh chóng sửa lỗi trước khi khách hàng bị ảnh hưởng.

Ngoài khả năng giám sát lỗi xuất sắc, APM nhẹ của Airbrake giúp các nhà phát triển theo dõi hiệu suất và tính khả dụng của ứng dụng của họ thông qua các số liệu như yêu cầu HTTP, thời gian phản hồi, số lần xuất hiện lỗi và sự hài lòng của người dùng.

Cuối cùng, Theo dõi triển khai Airbrake giúp các nhà phát triển theo dõi xu hướng, khắc phục các triển khai xấu và cải thiện chất lượng mã.

Kể từ năm 2008, Airbrake đã trở thành một phần quan trọng trong cộng đồng Ruby và đã phát triển để bao gồm tất cả các ngôn ngữ lập trình chính. Airbrake tích hợp liền mạch với các ứng dụng yêu thích của bạn để bao gồm các tính năng hiện đại như đăng nhập một lần và cài đặt dựa trên SDK. Từ thử nghiệm đến sản xuất, bộ thông báo Airbrake luôn hỗ trợ bạn.

Thời gian của bạn rất quý giá, vậy tại sao lại lãng phí thời gian để xem nhật ký, chờ báo cáo của người dùng hoặc trang bị thêm các công cụ khác để giám sát ứng dụng của bạn? Bạn thực sự không có gì để mất. Truy cập airbrake.io/try/bikeshed để tạo tài khoản nhà phát triển MIỄN PHÍ của bạn ngay hôm nay!

JOËL: Vì vậy, gần đây tại thinkbot, chúng tôi đã có những cuộc trò chuyện xung quanh bài tập lập mô hình dữ liệu thực sự thú vị này, giả sử đây là một công ty và bạn muốn mua áo phông cho mọi người trong công ty. Bạn đã có sẵn một số áo phông vì trước đây bạn đã từng làm việc này ở một vài nhà kho khác nhau. Và bạn cần biết mình cần đặt bao nhiêu áo thun mới có đủ cho tất cả mọi người.

Vì vậy, miễn là bạn giữ mọi thứ đơn giản, phép toán sẽ khá dễ dàng vì bạn tính tổng số người tại công ty của mình, sau đó tính tổng số lượng áo sơ mi trên tất cả các kho hàng của bạn và điều đó mang lại cho bạn những chiếc áo phông bạn cần , những chiếc áo phông mà bạn có. Bạn nhận được sự khác biệt giữa hai con số đó và điều đó cho bạn biết bạn cần đặt bao nhiêu áo phông mới. Trường hợp mọi thứ trở nên phức tạp hơn là khi bạn bắt đầu giới thiệu kích cỡ áo phông và đó là lúc mô hình hóa dữ liệu thú vị xuất hiện.

Nếu mọi người trong công ty của bạn có kích cỡ áo phông mà họ muốn và sau đó tại kho hàng của bạn, bạn lưu trữ...đối tượng đại diện cho kho lưu trữ một hàm băm kích cỡ và số lượng mỗi kích cỡ bạn có. Bây giờ, làm thế nào để bạn làm tất cả những điều này, chẳng hạn như, tổng hợp mọi thứ? Và nó không thực sự chỉ là một con số mà bạn muốn. Bây giờ bạn cần biết có bao nhiêu công ty nhỏ, vừa và lớn.

Và, đôi khi, bạn có một hàm băm. Đôi khi, bạn chỉ có các biểu tượng trên một người dùng và bạn có một tổng số trên các giá trị băm. Có thể thực hiện một số khác biệt giữa các giá trị băm. Và nó trở nên khó khăn để làm việc với. Vì vậy, đó là loại vấn đề như nó được trình bày ban đầu. Và chúng tôi đã có một cuộc trò chuyện thực sự thú vị xung quanh các cách khác nhau để cố gắng giải quyết vấn đề theo cách thực sự rõ ràng và tốt đẹp.

STEPHANIE: Vâng, điều đó thật thú vị bởi vì những gì bạn mô tả nghe giống như lần lặp lại đầu tiên của việc giải quyết vấn đề là, ồ, nhà kho lưu trữ thông tin này dưới dạng hàm băm. Vì vậy, có thể tôi sẽ tạo một hàm băm mới cho số lượng kích cỡ áo phông mà tôi cần và sau đó thực hiện so sánh trên hai hàm băm đó. Có vẻ như có một số khó sử dụng hoặc thậm chí có thể có một số mã trùng lặp ở đó. Đó có phải là những gì bạn nghĩ rằng tất cả các bạn đang cố gắng giải quyết bằng cách mô hình hóa điều này theo cách khác không?

JOËL: Tôi nghĩ rằng chúng tôi nhanh chóng gặp phải một số hạn chế với hàm băm. Một điều thú vị trước khi chúng tôi bắt đầu cố gắng kết hợp một loạt các hàm băm là một số dữ liệu tồn tại dưới dạng hàm băm trên các kho. Nhưng để có được những chiếc áo phông mà chúng tôi cần, tất cả những gì chúng tôi có là một loạt người dùng và kích cỡ cho tất cả họ.

Và chúng ta có thể sử dụng phương thức thú vị này từ Enumerable có tên là Tally để cung cấp cho chúng ta một loại hàm băm Tally chỉ là ánh xạ kích thước, hai lần đếm kích thước đó trong mảng. Và đó là một phương pháp thực sự thú vị. Bạn không phải thường xuyên sử dụng nó trong Ruby. Và thật tuyệt vì định dạng hàm băm đó trùng khớp với định dạng giống như hàm băm được lưu trữ trên các đối tượng kho.

STEPHANIE: Đúng. Vì vậy, bây giờ bạn đang so sánh táo với táo. Nhưng có vẻ như biểu diễn hàm băm này có một ý nghĩa nào đó.

JOËL: Vâng. Tôi đoán, đối với tôi, tôi có xu hướng thấy bất cứ lúc nào bạn thực hiện các thao tác phức tạp hơn trên hàm băm hơn là chỉ đọc vào đọc ra; nó có thể muốn trở thành một loại đối tượng giá trị nào đó. Và, trong trường hợp này, chúng tôi muốn làm toán trên các giá trị băm. Tôi nghĩ rằng phương trình vẫn giống như vậy. Chúng tôi đang cố gắng tìm ra sự khác biệt giữa hai loại, giữa muốn và có, nhưng bạn không thể trừ trực tiếp một hàm băm từ một hàm băm khác.

Có một số điều bạn có thể làm với phương pháp hợp nhất băm cho phép bạn chuyển một khối tùy chỉnh và thực hiện một số điều ở đó. Nhưng chúng ta sẽ phải làm điều này lặp đi lặp lại. Và bây giờ chúng tôi đang tiết lộ một chút kiến ​​thức đó. Vì vậy, nó giống như một cái gì đó mà bạn có thể thực sự muốn đặt tên cho khái niệm này và biến nó thành một đối tượng của riêng nó mà sau đó có thể có các loại hoạt động miền riêng dưới dạng các phương thức trên đó.

STEPHANIE: Vâng, tôi rất thích điều đó. Bởi vì ngay cả khi tôi đang nghĩ về nó khi bạn đang lưu trữ dữ liệu như vậy chỉ bằng một hàm băm, bạn gọi nó là gì? Giống như, bạn đặt tên cho nó là gì? Tôi nghĩ rằng tôi đã thấy những thứ như vậy được đặt tên, chẳng hạn như dữ liệu áo phông hoặc, chẳng hạn như dữ liệu kho hàng hoặc số lượng áo phông trong kho hoặc số lượng áo phông. Bạn biết đấy, đó là khi nó bắt đầu phân kỳ và cuối cùng bạn có thể thấy cùng một dữ liệu, giống như, được trình bày, nhưng nó được đặt tên những thứ khác nhau trong các phần khác nhau của mã. Và tôi, theo kinh nghiệm, đã thấy điều đó rất đau đớn.

JOËL: Vâng, bởi vì tôi đoán bạn có thể có sẵn những chiếc áo phông từ nhà kho của bạn; đó là một băm. Nhưng hàm băm được tạo từ người dùng có thể được gọi là thứ gì đó như tùy chọn của người dùng. Và nếu bạn đang đọc đoạn mã đó và bạn thấy một hàm băm, và bạn muốn, được rồi, hai hàm băm mà tôi đang xem, có thể trong một bài kiểm tra, chỉ là tình cờ có cùng khóa? Hay những loại này về cơ bản là giống nhau? Hay ý tưởng về những chiếc áo phông trên tay giống như một cổ phiếu khác với một sở thích? Và chúng có đại diện cho những thứ khác nhau giống nhau trong kịch bản cụ thể này không?

STEPHANIE: Đúng. Và đặc biệt nếu sau đó có các phương thức mà bạn đang chuyển cấu trúc dữ liệu thực sự đại diện cho cùng một thứ. Nhưng bạn đang chuyển nó dưới dạng đối số, và sau đó, đột nhiên, một tên biến, tùy chọn người dùng hoặc tùy chọn áo phông của người dùng trở thành, bạn biết đấy, số lượng áo phông. Điều đó đã thực sự gây nhầm lẫn cho tôi trước đây.

JOËL: Tôi nghĩ, có một điều trở nên rắc rối rất nhanh là bạn có tất cả các đồ vật trong nhà kho này có hàm băm của, giống như, có sẵn trên chúng. Và những gì bạn thực sự muốn là một loại đối tượng tổng hợp cho bạn biết không phải kho hàng có sẵn cho một nhà kho mà là trên tất cả các nhà kho. Vì vậy, tôi đoán là bạn phải đi qua mảng kho hàng đó và bằng cách nào đó tổng hợp tất cả các giá trị băm đó lại với nhau. Và bởi vì chúng đã được kiểm đếm, bạn không thể thực hiện Kiểm đếm đếm được nữa. Bạn phải tìm ra cách nào đó để kết hợp chúng lại với nhau và điều đó trở nên khó khăn rất nhanh.

STEPHANIE: Đúng. Tôi có thể thấy chúng đang bắt đầu giống như các vòng lặp lồng nhau, đặc biệt nếu bạn chỉ đang làm việc với các nguyên hàm.

JOËL: Tôi nghĩ rằng một số triển khai ban đầu mà chúng tôi thấy cuối cùng đã thực hiện được, chẳng hạn như, một số loại khối giảm hoặc each_with_object, hoặc một cái gì đó tương tự, theo tôi nghĩ, đó là những giải pháp tốt ở đây. Nhưng những gì sống bên trong những khối đó mới là thứ trở nên phức tạp. Và tôi không biết bạn thế nào, nhưng tôi cảm thấy như thể tôi đang đọc qua một đoạn mã nào đó và rồi đột nhiên tôi thấy một khối rút gọn, và nó giống như mười dòng logic với một số thứ có thể lồng vào nhau , chẳng hạn như, có thể là một số vòng lặp lồng nhau hoặc một số điều kiện bên trong nó, điều đó hơi đáng sợ. Rút gọn không phải là một phương pháp cực kỳ dễ dàng để bạn bận tâm, đặc biệt là khi khối có rất nhiều logic.

STEPHANIE: Vâng, đó là một điểm thực sự tốt. Nó chắc chắn cho tôi tạm dừng. Và tôi phải, bạn biết đấy, cam kết đọc toàn bộ phương pháp này để hiểu đầy đủ [cười] chuyện gì đang xảy ra.

JOËL: Đôi khi, như, thực sự tạm dừng và, như, chú thích bằng các bình luận và tất cả những thứ này.

(Video) TIN MỚI 02/06/2023 NÓNG: ĐÀI LOAN TUYÊN BỐ DÙNG SIÊU TÊN LỬA ĐỂ TẤN CÔNG ĐẬPTAMHIỆP NẾU T.Q ĐỘNGBINH

STEPHANIE: Vì vậy, cuối cùng thì bạn đã nghĩ đến điều gì khi giải quyết vấn đề tổng hợp tất cả các kích cỡ áo phông khác nhau cho mỗi nhà kho?

JOËL: Vì vậy, tôi nghĩ, đối với tôi, đôi khi, sẽ dễ dàng hơn khi làm cho vấn đề nhỏ hơn một chút, giải quyết vấn đề nhỏ hơn đó và sau đó cố gắng mở rộng quy mô trở lại và đặc biệt là khi bạn đang giải quyết vấn đề như giảm hoặc tổng hợp một bộ sưu tập lớn. Giống như, hãy quên việc xử lý một bộ sưu tập. Làm cách nào tôi có thể kết hợp hai mục thuộc loại này? Vì vậy, nếu tôi có hai trong số các giá trị băm này. Và quên việc lắp nó cho một mảng. Nhưng nếu tôi có hai trong số các giá trị băm này, làm cách nào tôi có thể kết hợp chúng lại với nhau?

Và bạn có thể làm điều này với hợp nhất hàm băm. Tôi muốn làm mọi thứ gói gọn hơn một chút. Và bởi vì tôi cũng biết rằng chúng tôi đang xây dựng thêm một số logic xung quanh những thứ này, nên tôi thực sự đã viết một đối tượng tùy chỉnh. Tôi gọi nó là kiểm đếm, có lẽ lấy cảm hứng từ phương pháp Có thể đếm được đó và triển khai toán tử cộng trên đối tượng kiểm đếm này. Vì vậy, một đối tượng kiểm đếm có thể cộng với một đối tượng kiểm đếm khác. Và phản hồi từ đó là bạn nhận được đối tượng kiểm đếm thứ ba đi qua tất cả các khóa và tính tổng chúng lại với nhau. Vì vậy, nó là một loại tổng hợp.

STEPHANIE: Đây là một ví dụ thú vị về một phương thức mà một động từ cũng đại diện cho một danh từ để đặt tên cho giá trị trả về, phải không? Vì vậy, phương thức Tally trên Enumerable trả về một hàm băm, mà chúng ta đã nói đến trong một thời gian, giống như, một cấu trúc dữ liệu, bạn biết đấy, hoàn toàn ổn, nhưng có lẽ chúng ta có thể tận dụng biến nó thành như bạn đã nói, một đối tượng giá trị để cung cấp cho nó nhiều ý nghĩa hơn hoặc để làm cho nó dễ dàng hơn để làm việc với. Và có vẻ như phần đặt tên đã rơi vào lòng bạn.

JOËL: Yeah, tally thú vị ở chỗ nó vừa là danh từ vừa là động từ trong tiếng Anh. Tôi không chắc thuật ngữ ngữ pháp cho loại từ đó là gì.

STEPHANIE: Vì vậy, khi bạn trích xuất lớp mới này, bạn đã có những hiểu biết hoặc quan sát nào về vấn đề này?

JOËL: Điều thực sự thú vị về điều này là một khi bạn có cách kết hợp hai đối tượng lại với nhau, giảm là một cách để loại tỷ lệ lên đến một số tùy ý. Và như vậy, giống như bạn có thể tính tổng một dãy số bằng cách giảm cộng trên mảng. Bởi vì tôi có dấu cộng trên đối tượng kiểm đếm của mình, nên tôi có thể rút gọn toán tử cộng trên một mảng đối tượng kiểm đếm. Và tất cả chúng chỉ là tổng cộng trong một kiểm đếm duy nhất đó là sự kết hợp của tất cả chúng. Vì vậy, điều này thực sự mát mẻ.

Thứ từng là một khối giảm đáng sợ, logic đáng sợ được chuyển sang một phương thức cộng, mà tôi nghĩ là dễ tiếp cận hơn nhiều. Bởi vì tôi có thể đi vào ngữ cảnh của một đối tượng và nói, được rồi, tôi có đối tượng kiểm đếm này và tôi đang cố gắng thêm nó vào một đối tượng kiểm đếm khác. Và chúng ta chỉ đi từng phím một, cộng chúng lại với nhau. Đủ đơn giản.

Và sau đó ở nơi chúng tôi đang giảm, tất cả những gì chúng tôi đang nói là danh sách các số liệu giảm cộng. Và tôi đã biết mẫu đó rồi vì tôi làm nó với các số nguyên để tính tổng chúng lại với nhau. Và vì vậy bây giờ tôi chỉ có một dòng thực sự đơn giản này trong phần đáng sợ. Và logic phức tạp thực tế dễ tiếp cận hơn nhiều.

STEPHANIE: Điều đó thật tuyệt. Tôi thấy điều này thực sự thú vị vì chúng tôi đang cố gắng tính toán trên hai giá trị băm này. Vì vậy, bạn biết đấy, nó giống như một phép kiểm đếm vì nó đại diện cho một điểm số hoặc, đại loại như, một con số. Giống như, chúng tôi có thể triển khai các toán tử cộng đó và có được một giải pháp đơn giản vì chúng tôi đang làm việc với các con số.

JOËL: Vâng, tôi nghĩ có thể công bằng khi mô tả nó vì có thể số phức là thuật ngữ mà tôi sử dụng. Tôi không biết liệu điều đó có đúng về mặt toán học không. Thông thường, khi bạn đang xử lý những thứ đại diện cho một số hoặc thứ gì đó được biểu thị bằng số nhưng có thể có nhiều hơn một số liên quan đến nó. Nhưng dù sao bạn vẫn muốn làm toán với loại giá trị phức, đa số này.

Và một ví dụ mà bạn có thể có là, giả sử, một điểm trong không gian 2D. Bạn có tọa độ X và tọa độ Y. Và bạn có thể làm toán về điểm. Trên thực tế, có cả một lĩnh vực toán học để giải quyết loại vấn đề đó. Đó là một điều quan trọng mà bạn phải làm. Bạn có thể muốn có thể cộng hoặc trừ điểm. Bạn có thể muốn thực hiện một số loại phép nhân trên chúng. Và vì vậy chỉ vì thứ gì đó có nhiều hơn một số liên quan đến nó không có nghĩa là nó không thể được sử dụng cho toán học. Trên thực tế, đôi khi, đó là nơi toán học huyền ảo phát huy tác dụng.

Nhưng khi chúng ta coi chúng là số nguyên thủy, và giả sử, cặp XY của chúng ta là một hàm băm, hoặc, giống như, một mảng hai phần tử, thì chúng ta sẽ mất khả năng làm toán tốt. Nếu chúng ta tạo, giả sử, một lớp điểm có X và Y, sau đó chúng ta xác định cộng, chúng ta xác định trừ, chúng ta xác định phép nhân vô hướng và vectơ, những thứ tương tự, bây giờ chúng ta có thể thực hiện tất cả các thao tác đó. Và chúng ta có thể coi nó như toán học, mặc dù nó không chỉ là một số nguyên đơn giản nữa.

STEPHANIE: Vâng, tôi rất thích điều đó vì cuối cùng chúng tôi làm việc với dữ liệu, bạn biết đấy, thậm chí có thể từ cơ sở dữ liệu của chúng tôi. Nhưng sau đó, chắc chắn, chúng ta muốn, chẳng hạn như, tìm hiểu điều gì đó về nó. Vì vậy, tôi đã suy nghĩ về tần suất tôi sử dụng GROUP BY trong các truy vấn MySQL và đôi khi, tôi quan tâm đến số lượng hoặc, chẳng hạn như số lượng bản ghi.

Và có lẽ đây là lý do tại sao chúng ta thấy, chẳng hạn như hàm băm nguyên thủy được sử dụng thường xuyên trong các cơ sở mã mà sau đó trở nên khá phức tạp khi chúng ta đang cố gắng, như tôi đã đề cập, chẳng hạn như tìm hiểu điều gì đó về nó hoặc, chẳng hạn như, so sánh mọi thứ hoặc bất kỳ logic nào mà chúng ta cần làm. Và biến chúng thành những đồ vật mà sau đó tự biết cách làm toán [cười] rất tuyệt.

JOËL: Băm rất thú vị vì chúng gần như chỉ là cấu trúc dữ liệu cơ bản. Và tôi nghĩ, rất thường xuyên, chúng là những tiền đề. Chúng là những thứ muốn cuối cùng trở thành đồ vật. Và, đôi khi, những gì tôi tìm thấy là các giá trị băm được chuyển qua một hệ thống. Và nhiều lớp hoặc hệ thống con khác đều có các bit logic hoạt động trên hàm băm vì hàm băm không thể sở hữu điều đó.

Và do đó, bạn kết thúc với logic xung quanh khái niệm về bất cứ thứ gì hàm băm đại diện cho loại phân tán và có thể trùng lặp trên ba hoặc bốn vị trí trong ứng dụng. Và sau đó, đột nhiên, nếu bạn đặt tên cho nó, nếu bạn tạo một lớp cho nó, bạn có thể kéo tất cả logic đó vào một nơi. Và đột nhiên, nó có thể dọn sạch tất cả những nơi xung quanh bởi vì bây giờ họ không phải quan tâm đến việc triển khai chính xác những gì hoạt động trên hàm băm.

Tuy nhiên, điều đó cũng có nghĩa là các hoạt động này thường có tên miền đẹp. Và, trong trường hợp số phức, bạn thậm chí có thể biểu diễn số đó thông qua các phép toán, chẳng hạn như cộng hoặc trừ. Và điều đó cho phép mã của bạn đọc thực sự độc đáo.

STEPHANIE: Đúng. Điều này khiến tôi suy nghĩ về cách tôi đã đề cập, chẳng hạn như, kiểm đếm như một danh từ và, bạn biết đấy, bạn đã triển khai lớp tùy chỉnh của mình. Nhưng bạn có nghĩ rằng có bất kỳ giá trị nào trong ý tưởng kiểm đếm cụ thể giống như một thứ giống như hàm băm với một số làm giá trị cho mỗi khóa, chẳng hạn như tồn tại dưới dạng một lớp tổng quát hơn để mọi người sử dụng không?

JOËL: Ồ, thật thú vị. Vì vậy, trong triển khai cá nhân của mình, tôi đã mã hóa cứng các giá trị cho nhỏ, trung bình và lớn vì đó là các kích cỡ áo phông trong ví dụ. Nhưng bạn đang nói về một số loại đối tượng kiểm đếm chung chung có thể là đá quý hoặc thứ gì đó tương tự mà mọi người có thể sử dụng để biểu thị số lượng những thứ tùy ý hoặc nhiều số lượng những thứ tùy ý mà sau đó có thể triển khai một số toán tử phổ biến để bạn có thể cộng hoặc trừ chúng.

STEPHANIE: Vâng, chính xác. Bởi vì tôi chỉ đang nghĩ, bạn biết đấy, như tôi đã đề cập, tôi thường trình bày điều đó khi tôi đếm số lượng bản ghi trong cơ sở dữ liệu của mình. Hoặc thậm chí tôi có thể nhớ lại một vấn đề mà tôi đã gặp phải trước đây khi tôi phải tìm ra số lượng đơn đặt hàng cho một cửa hàng thương mại điện tử dựa trên vị trí. Và tôi đã giữ nó trong một cấu trúc dữ liệu băm, nhưng thực sự, đó là một kiểm đếm. [cười] Và vì vậy, vâng, tôi nghĩ rằng có lẽ chúng ta đã tình cờ bắt gặp một cách trình bày rất hữu ích cho những vấn đề rất phổ biến.

JOËL: Vâng, tôi có thể thấy phiên bản chung này đang được sử dụng. Có thể đó là cơ hội của bạn để ra ngoài và tạo ra một số nguồn mở, hoặc có thể điều này đã tồn tại. Có lẽ chúng ta nên nghiên cứu điều đó trước.

STEPHANIE: Vâng, nếu bất kỳ thính giả nào của chúng tôi biết, [cười] hãy gửi email cho chúng tôi.

JOËL: Vì vậy, một điều thực sự thú vị đối với tôi về tất cả những thay đổi này, giới thiệu đối tượng giá trị, dọn sạch phần giảm, tất cả những thứ đó, đó là, cuối cùng, một khi...có đối tượng này đại diện cho loại của giá trị hợp chất tổng hợp, kiểm đếm, sau đó phương trình giữ nguyên. Và tôi chỉ có thể đánh dấu vào các biến đó như trước đây.

Trong khi trước đây, khi chúng tôi chuyển từ chỉ một lần đếm sang số này, chẳng hạn như, chúng tôi cần tính đến các kích thước, chẳng hạn như, đã phá vỡ quá trình triển khai ban đầu của mã. Vì vậy, thật buồn cười khi bạn sắp xếp từ một triển khai đơn giản và sau đó là một yêu cầu mới, điều này phá vỡ nó. Nhưng sau đó, đột nhiên, việc thay đổi hàm băm thành một đối tượng đã tạo ra mã ban đầu, mã này không thực sự cần phải thay đổi; nó chỉ hoạt động trở lại.

STEPHANIE: Hừm. Điều đó thực sự thú vị bởi vì nó khiến tôi nghĩ về việc có thể những người nguyên thủy đã hoàn toàn ổn như thế nào, bạn biết đấy, trong loạt yêu cầu đầu tiên, và không phải cho đến khi, chẳng hạn như, một sự phức tạp bổ sung hoặc một thứ gì đó mới xuất hiện mà chúng tôi cần để đạt được một đối tượng có thể ủng hộ sự thay đổi.

JOËL: Vâng. Và tôi nghĩ rằng tôi sẽ tranh luận rằng nếu bạn chỉ tính số lượng áo phông thô, thì một số nguyên có thể là giá trị phù hợp để sử dụng ở đó. Nhưng nếu bạn đang đếm chia nhỏ theo cỡ áo phông, thì có một đối tượng là một thứ duy nhất phản ứng với cộng và trừ để bạn có thể sử dụng nó trong cùng một phương trình mà bạn đang nói tổng tất cả những thứ này từ nhà kho, và sau đó tạo sự khác biệt với những chiếc áo phông mà chúng tôi cần để chúng trở nên thực sự đẹp.

STEPHANIE: Tuy nhiên, bạn có nghĩ rằng có một số giá trị trong việc trải qua quá trình triển khai hàm băm trước, sau đó sử dụng một đối tượng tùy chỉnh hơn không? Tôi tò mò muốn biết cuộc hành trình đó như thế nào.

JOËL: Thật khó để nói. Tôi sẽ nói có thể có. Nhưng tôi cũng có thể thấy một người nào đó đã làm điều này rất nhiều, người đã xây dựng các loại kinh nghiệm, bản năng xung quanh điều này có thể ngay lập tức giống như, ồ, đợi đã, chúng tôi đang cố gắng tính tổng các giá trị băm ở đây. Rõ ràng, đây cần phải là đối tượng. Rõ ràng, thứ chúng ta cần là thứ thực hiện toán tử cộng mà chúng ta có thể rút gọn.

STEPHANIE: Vâng, tôi rất thích điều đó. Bởi vì một phần, bạn biết đấy, biết mình cần đạt được điều gì là đã nhìn thấy nó đủ nhiều lần và nhìn thấy các khuôn mẫu, phải không?

JOËL: Điều này làm tôi nhớ đến một mẫu cụ thể đến từ thế giới lập trình chức năng. Nó có một loại tên nghe có vẻ đáng sợ. Đó là monoid, không phải đơn nguyên, monoid. Và ý tưởng trong ngữ cảnh của Ruby là một loại đối tượng nào đó triển khai phương thức dấu cộng. Vì vậy, hai trong số các đối tượng này có thể kết hợp với nhau. Và thông thường, bạn cũng có một số loại phiên bản trống của đối tượng này hoặc một số loại, chẳng hạn như giá trị bằng không.

Và có một số quy tắc xung quanh, chẳng hạn như cách đối tượng này phải hoạt động. Giống như, bạn không thể đặt bất kỳ triển khai nào bạn muốn vào phương thức cộng đó. Một số yêu cầu phải được đáp ứng để nó được xem xét, chẳng hạn như một phương thức cộng hợp lệ trong mẫu này. Nhưng nếu bạn đáp ứng các yêu cầu đó, thì các mảng của loại đối tượng này vốn dĩ có thể rút gọn được vì bạn chỉ có thể rút gọn cộng trên chúng.

(Video) FAPtv Cơm Nguội 288: Đi Học Cùng Con

Và vì vậy tôi nghĩ rằng bất cứ khi nào bạn đang cố gắng tổng hợp một số loại cấu trúc dữ liệu khó sử dụng, thì đó có thể là một mẫu hữu ích bởi vì, bạn biết đấy, chờ đã, miễn là tôi có cách kết hợp hai mục lại với nhau và có khả năng tạo ra một số trạng thái trống rỗng, tôi có thể tổng hợp toàn bộ danh sách này.

STEPHANIE: Tôi tò mò không biết điều đó có áp dụng cho các giá trị không phải là số không?

JOËL: Vâng, bất kỳ loại kết hợp tập hợp nào, sao cũng được. Vì vậy, có thể những gì bạn đang làm là kết hợp các chuỗi lại với nhau.

STEPHANIE: Hiểu rồi.

JOËL: Nối chuỗi là một dạng tổ hợp. Và do đó, bạn có thể giảm bớt một số kiểu nối trên một mảng các chuỗi và bạn kết thúc với một chuỗi tổng hợp là sự kết hợp của tất cả chúng. Tuy nhiên, đôi khi, bạn không chỉ lấy các giá trị và đặt chúng cạnh nhau để những gì bạn có là tất cả chúng cùng một lúc. Thay vào đó, bạn có thể làm một số loại so sánh.

Một ví dụ ở đây có thể là các giá trị Boolean. Bạn có thể nói theo cách mà tôi sắp xếp, trích dẫn, bỏ trích dẫn, "tổng hợp" hai giá trị, hai giá trị Boolean bằng toán tử AND. Và do đó, bạn có hai giá trị Boolean và bạn nhận được một loại giá trị kết hợp mới từ chúng, nghĩa là cả hai giá trị này đều đúng?

STEPHANIE: Whoa, điều đó làm tôi choáng váng ngay bây giờ. Bởi vì tôi chưa bao giờ nghĩ đến toán tử AND trên Booleans, về cơ bản là tổng hợp chúng thành một giá trị đúng hoặc sai duy nhất. [cười]

JOËL: Nó hơi kỳ lạ, phải không? Nhưng tôi đoán chúng ta cũng làm điều tương tự với những con số. Một cộng một không cho ta 11 trừ khi bạn đang viết JavaScript.

STEPHANIE: [cười]

JOËL: Bạn biết đấy, chúng tôi cũng nhận được một số mới, đó là một số loại, giống như, sự kết hợp của cả hai. Vì vậy, tương tự, có nghĩa là hai Booleans có thể kết hợp để tạo ra một loại giá trị Boolean thứ ba mới. Tuy nhiên, điều thực sự thú vị là khi bạn có kiểu kết hợp này, nếu bạn cố gắng giảm AND trên một mảng Booleans, thì thứ bạn đã tạo một cách hiệu quả là Phương thức đếm được tất cả của Ruby kiểm tra để nói, là tất cả các giá trị trong này mảng đúng không?

STEPHANIE: Thú vị. Nhưng thực sự, cách được triển khai giống như một định nghĩa về ý nghĩa tổng hợp của Booleans, phải không?

JOËL: Đúng. Nhưng đó là ý tưởng tổng hợp hai giá trị và mở rộng nó thành một mảng gồm nhiều giá trị. Vì vậy, chúng tôi biết Boolean AND. Một cách khác để suy nghĩ về nó là, cả hai giá trị này đều đúng? Là câu hỏi mà nó đang cố gắng trả lời. Và sau đó chúng tôi mở rộng quy mô đó để nói rằng, cả hai giá trị này có đúng với mọi thứ không? Vậy tất cả những giá trị này có đúng không? Bởi vì chúng ta đang đi từ hai đến nhiều.

STEPHANIE: Tuyệt. Vì vậy, có lẽ bài học rút ra cho một số thính giả của chúng tôi có thể là, chẳng hạn như, lần tới khi họ thấy mình phải xử lý một bộ sưu tập hoặc một Vô số và, bạn biết đấy, sử dụng phép rút gọn hoặc, chẳng hạn như, cố gắng chia nhỏ nó để so sánh hai trong số đó các yếu tố đầu tiên và tìm ra cách chúng muốn tương tác đó hoạt động. Điều đó nghe có đúng không?

JOËL: Vâng, chắc chắn rồi. Sau khi bạn có cách kết hợp hai phần tử lại với nhau, nếu bạn muốn mở rộng quy mô lên n phần tử, bạn chỉ cần cắm nó vào lệnh rút gọn và phần còn lại sẽ được thực hiện cho bạn.

Bài học lớn của tôi từ bài tập này là: giá trị của việc tạo các đối tượng tùy chỉnh. Gói các nguyên hàm như hàm băm trong một đối tượng và thêm một vài phương thức miền vào chúng đã tạo ra sự khác biệt như vậy trong quá trình triển khai cuối cùng của tôi.

Thứ hai, tôi nghĩ đó là những gì bạn đang nói, toàn bộ vấn đề về phá vỡ các vấn đề giảm phức tạp bằng cách tìm ra cách kết hợp hai mục và sau đó chỉ sử dụng giảm để chia tỷ lệ thành một mảng.

Và sau đó, cuối cùng, tôi nghĩ đây là một điểm mà chúng ta đã đề cập trước đây trên podcast này, giá trị của từ vựng cụ thể - có thể gọi tên đồ vật và mẫu. Và vì vậy biết một số chi tiết của mô hình monoid này và đặt tên cho nó có nghĩa là bây giờ tôi bắt đầu nhìn thấy nó ở những nơi. Và vì vậy, ngay khi tôi thấy, ồ, đợi đã, chúng ta đang tổng hợp các giá trị; chúng tôi đang kết hợp hai giá trị lại với nhau và sau đó thực hiện điều này theo cách giảm, ngay lập tức, tâm trí tôi nghĩ, chờ đã, cảm giác giống như monoid. Và sau đó, tôi có thể khám phá điều đó với đối tượng tùy chỉnh của mình để cố gắng làm cho mã tốt hơn.

STEPHANIE: Vâng. Và ngay cả khi bạn không nhớ cụ thể phần monoid, thì ý tưởng về Tally, chẳng hạn, đó là điều mà tôi nghĩ là thực sự thú vị và thực sự có thể áp dụng cho rất nhiều cơ sở mã.

JOËL: Vì vậy, đối với những người quan tâm thực tế hơn mã này trông như thế nào, tôi đã đặt tất cả những thứ này vào một Gist và tôi sẽ liên kết với nó trong các ghi chú của chương trình. Đây là một bài tập thực sự thú vị đối với tôi vì tôi đã sử dụng hai kỹ thuật phát triển để giúp xây dựng điều này.

Thứ nhất, tôi đã sử dụng một cách tiếp cận lập trình biết chữ, trong đó tôi chỉ có một tệp Ruby và sẽ đưa vào một số khối nhận xét lớn nói về thiết lập là gì, tôi đang cố gắng làm gì và sau đó mô tả cách tôi muốn để sử dụng mã và sau đó cố gắng viết mã để điều đó xảy ra. Và sau đó, đối với các đối tượng thực tế mà tôi đang sử dụng ẩn, tôi đã sử dụng TDD để lái thử và xây dựng chúng.

Vì vậy, bạn đã có tất cả những điều đó trong Gist. Chúng tôi đã có các bài kiểm tra và loại tập lệnh lập trình biết chữ gần giống như một bài đăng trên blog nhỏ, ngoại trừ nó là Ruby có thể thực thi được. Vì vậy, nếu bạn tò mò muốn xem về điều đó, liên kết có trong ghi chú chương trình.

STEPHANIE: Đó là một định dạng rất hay. Tôi rất hào hứng để có một cái nhìn.

Trên lưu ý đó, chúng ta sẽ kết thúc?

JOËL: Hãy kết thúc.

STEPHANIE: Bạn có thể tìm thấy ghi chú hiển thị cho tập này tại bikeshed.fm.

JOËL: Chương trình này do Mandy Moore sản xuất và biên tập.

STEPHANIE: Nếu bạn thích nghe, một cách thực sự dễ dàng để hỗ trợ chương trình là để lại cho chúng tôi xếp hạng nhanh hoặc thậm chí là đánh giá trong iTunes. Nó thực sự giúp những người khác tìm thấy chương trình.

JOËL: Nếu bạn có bất kỳ phản hồi nào về tập này hoặc bất kỳ tập nào khác của chúng tôi, bạn có thể liên hệ với chúng tôi @_bikeshed hoặc bạn có thể liên hệ với tôi @joelquen trên Twitter.

STEPHANIE: Hoặc liên hệ với cả hai chúng tôi tại[email được bảo vệ]qua thư điện tử.

JOËL: Cảm ơn rất nhiều vì đã lắng nghe The Bike Shed và hẹn gặp lại bạn vào tuần tới.

TẤT CẢ: Tạm biệteeeeee!!!!!!!

NGƯỜI GIỚI THIỆU: Podcast này được mang đến cho bạn bởi thinkbot, đối tác chuyên gia về chiến lược, thiết kế, phát triển và quản lý sản phẩm của bạn. Chúng tôi mang các sản phẩm kỹ thuật số từ ý tưởng đến thành công và hướng dẫn bạn cách thực hiện vì chúng tôi quan tâm. Tìm hiểu thêm tại thinkbot.com.

(Video) Chớp mắt nhà Sính Dờ đã hiện hình sau cơn mưa trên sa mạc đá

Được tài trợ bởi:

Hỗ trợ nhà để xe đạp

Videos

1. Gái Đẹp Chạy BMW S1000RR Rước Học Sinh Bị Thanh Niên Gạ Đua
(Cường Vlog)
2. ĐỪNG MỞ CỬA CHO SKIBIDI TOILET VÀO 3H SÁNG TRONG MINECRAFT*TÔ GÀ ĐỪNG MỞ CỬA NHÀ VỆ SINH VÀO 3H SÁNG
(Toga TV)
3. Full các tập thả thính theo trend 2 3 CON MỰC của NMT Vlog
(NMT Vlog)
4. 600 câu hỏi lý thuyết lái xe ô tô ( Phần biển báo câu 365 - 429 ) - Thầy Tâm
(Hướng Dẫn Lái Xe An Toàn)
5. Radio số 386🌈 Cha già biến thái của xóm 🌈 Tiệm Bánh Radio
(Tiệm Bánh Radio)
6. Rap Việt Mùa 3 - Suboi, JustaTee, Karik, Thái VG, BigDaddy, Andree Right Hand, B Ray | Rap Việt 2023
(Vie Channel - HTV2)

References

Top Articles
Latest Posts
Article information

Author: Nicola Considine CPA

Last Updated: 08/22/2023

Views: 5443

Rating: 4.9 / 5 (69 voted)

Reviews: 92% of readers found this page helpful

Author information

Name: Nicola Considine CPA

Birthday: 1993-02-26

Address: 3809 Clinton Inlet, East Aleisha, UT 46318-2392

Phone: +2681424145499

Job: Government Technician

Hobby: Calligraphy, Lego building, Worldbuilding, Shooting, Bird watching, Shopping, Cooking

Introduction: My name is Nicola Considine CPA, I am a determined, witty, powerful, brainy, open, smiling, proud person who loves writing and wants to share my knowledge and understanding with you.