ฉันคิดว่าหนึ่งในหลักสำคัญของ OOP คือเรามีวัตถุซึ่งเป็นรายการที่เราสนใจในการจัดการและจากนั้นเราส่งข้อความถึงพวกเขา
ดังนั้นมันอาจดูเป็นธรรมชาติที่ฉันมีของสะสมและฉันจำเป็นต้องใส่มันเข้าไปในสายเดียวเพื่อที่จะทำมัน:
["x", "o", "o"].join(" | ") # joining a tic-tac-toe row in Ruby
(Smalltalk ทำเช่นเดียวกัน) " | "
เป็นในทางที่บางคนคิดว่าการเป็นอาร์กิวเมนต์หนึ่งสัญลักษณ์ของวิธีการที่จะเข้าร่วมได้ อาจเป็น" "
เช่นเดียวกันหากบอร์ดเกมนั้นเรียบง่ายขึ้น ดังนั้นองค์ประกอบการเข้าร่วม" | "
ไม่ใช่สิ่งที่เราสนใจโดยเฉพาะ - มันไม่ใช่วัตถุหลักในโปรแกรมที่มีความสำคัญหรือความสำคัญเป็นพิเศษ
ถ้า Python ใช้งาน
" | ".join(["x", "o", "o"])
มันรู้สึกค่อนข้างแปลกที่เกือบจะรู้สึกเหมือนว่าเรากำลังส่งข้อความไปยังการโต้แย้งเพื่อบอกข้อโต้แย้งเกี่ยวกับบางสิ่ง Python อาจจะเป็นขั้นตอนมากกว่านี้ใช่ไหม เพื่อบอกให้สายการเข้าร่วมทำหน้าที่ให้เราบ้างไหม?
เป็นการบันทึกการนำไปปฏิบัติเพื่อที่เราจะได้ไม่ต้องกำหนดjoin
คลาสสำหรับคอลเลกชั่นแต่ละคลาสที่เรามี? แต่มันไม่เป็นความจริงเลยที่เราสามารถเขียนคลาสคอลเลกชันใด ๆ ก็ได้เช่นใน Ruby:
module Enumerable
def my_join(joiner)
self.inject {|a,b| a.to_s + joiner + b.to_s}
end
end
(บางสิ่งเช่นนี้การเรียกto_s
แต่ละไอเท็มอาศัยto_s
ของแต่ละคลาสเพื่อทำสิ่งที่ถูกต้องของตัวเองเพื่อแปลงเป็นสตริงจากนั้นเชื่อมต่อกัน) ดังนั้นเราไม่จำเป็นต้องนำไปใช้กับ String, Hash หรือ Set หรือคลาสการรวบรวมใด ๆ ที่เรามี
Python ไม่ถูกต้องหรือไม่ไปตามเส้นทาง OOP มันใช้len("abc")
และtype([])
แทนที่จะเป็น"abc".len()
หรือ[].type()
แม้แต่ใน Python3 เหมือนกัน Python ทำสิ่งนี้ด้วยเหตุผลด้านการออกแบบหรือไม่?
Maybe Python is more procedural?
Python เป็นภาษาขั้นตอนที่มีการใช้งานเพิ่มเติมเล็กน้อย ("Python ได้รับแลมบ์ดา, ลด (), ตัวกรอง () และแผนที่ (), ความอนุเคราะห์จากแฮ็กเกอร์ Lisp ที่คิดถึงพวกเขาและส่งแพทช์ทำงาน") 2. นั่นคือประมาณหนึ่งทศวรรษครึ่งหลังจากที่มันถูกใช้งานครั้งแรก