ฉันพบการผสมผสานของ python ของ object-oriented this.method()
และmethod(this)
syntax / functional syntax / functional function ที่ไม่มั่นคงมาก:
x = [0, 1, 2, 3, 4]
x.count(1)
len(x)
any(x)
x.reverse()
reversed(x)
x.sort()
sorted(x)
นี่เป็นสิ่งที่แย่มากเพราะฟังก์ชั่นจำนวนมาก (แทนที่จะเป็นวิธีการ) ถูกทิ้งลงในเนมสเปซส่วนกลาง : วิธีการที่เกี่ยวข้องกับรายการ, สตริง, ตัวเลข, ตัวสร้าง, metaprogramming ทั้งหมดรวมกันในรายการเรียงตามตัวอักษรขนาดใหญ่
อย่างน้อยที่สุดภาษาที่ใช้งานได้เช่น F # จะมีฟังก์ชั่นทั้งหมดตั้งชื่ออย่างถูกต้องในโมดูล:
List.map(x)
List.reversed(x)
List.any(x)
ดังนั้นพวกเขาจึงไม่ได้ทั้งหมดเข้าด้วยกัน ยิ่งกว่านั้นนี่คือมาตรฐานที่ติดตามทั่วทั้งห้องสมุดดังนั้นอย่างน้อยก็สอดคล้องกัน
ฉันเข้าใจเหตุผลในการทำฟังก์ชั่น vs วิธีแต่ฉันยังคงคิดว่ามันเป็นความคิดที่ไม่ดีที่จะผสมพวกเขาเช่นนี้ ฉันจะมีความสุขมากถ้าปฏิบัติตามไวยากรณ์วิธีอย่างน้อยสำหรับการดำเนินงานทั่วไป:
x.count(1)
x.len()
x.any()
x.reverse()
x.reversed()
x.sort()
x.sorted()
ไม่ว่าวิธีการกลายพันธุ์หรือไม่การมีวิธีการดังกล่าวบนวัตถุนั้นมีข้อดีหลายประการ:
- ที่เดียวเพื่อค้นหาการทำงาน "ทั่วไป" ใน data-type: libraries / etc อื่น ๆ อาจมีสิ่งแฟนซีอื่น ๆ ที่พวกเขาสามารถทำได้กับประเภทข้อมูล แต่การดำเนินการ "เริ่มต้น" ทั้งหมดในวิธีการของวัตถุ
- ไม่จำเป็นต้องให้ทำซ้ำเมื่อโทร
Module
Module.method(x)
ยกตัวอย่างฟังก์ชั่นลิสต์ด้านบนทำไมฉันต้องพูดList
ซ้ำไปเรื่อย ๆ ? มันควรรู้ว่ามันคือ a List
และฉันไม่ต้องการเรียกใช้Navigation.map()
ฟังก์ชันนี้! การใช้x.map()
ไวยากรณ์ทำให้มันแห้งและยังคงชัดเจน
และแน่นอนว่ามันมีข้อได้เปรียบเหนือวิธีใส่ทุกอย่างในโลกของการทำมัน ไม่ใช่วิธีปัจจุบันที่ไม่สามารถทำสิ่งต่างๆให้สำเร็จได้ มันเป็นเรื่องที่ค่อนข้างสั้น ( len(lst)
) เนื่องจากไม่มีสิ่งใดถูกกำหนดชื่อ! ฉันเข้าใจถึงข้อดีในการใช้ฟังก์ชั่น (พฤติกรรมเริ่มต้น ฯลฯ ) ผ่านวิธีการต่างๆ แต่ฉันก็ยังไม่ชอบ
มันยุ่งแค่ และในโครงการขนาดใหญ่ความยุ่งเหยิงคือศัตรูที่เลวร้ายที่สุดของคุณ