ค่าใช้จ่ายวิธีการของวัตถุประสงค์ -c ทำให้วิธีการออกแบบ 'เล็ก ๆ น้อย ๆ หลายวิธี' ไม่สามารถมองเห็นได้หรือไม่?


15

ฉันมักโปรดปรานโดยใช้วิธีการเล็ก ๆ ตามคำแนะนำของหมู่คนบ๊อบมาร์ตินรหัสสะอาด ฉันได้อ่านยังเพียงพอเกี่ยวกับ internals Objective-C ที่จะมีอย่างน้อยความคิดบางอย่างเกี่ยวกับวิธีการจัดส่งข้อความการทำงานของมัน ( ชุด bbumsเป็นข้อมูลโดยเฉพาะอย่างยิ่งเกี่ยวกับเรื่องนี้)

ความกังวลเกี่ยวกับการปรับให้เหมาะสมก่อนวัยอันควรถึงกระนั้นฉันอยากจะรู้ว่าสิ่งที่การทำงานของ Objective-c ทำกับ objc_msgSend หรือไม่นั้นในทางปฏิบัตินั้นมีความหมายเพียงพอสำหรับแนวทาง 'วิธีเล็ก ๆ น้อย ๆ '

การค้นพบเชิงประจักษ์นั้นน่ายินดีเป็นอย่างยิ่ง (บางทีฉันอาจตั้งค่าการทดสอบด้วยตัวเอง) ประสบการณ์จากผู้ที่เขียนโครงการวัตถุประสงค์ขนาดใหญ่ก็คงจะยอดเยี่ยมเช่นกัน

การอธิบาย

น้ำเสียงทั่วไปของคำถามนั้นมีเจตนา ฉันไม่ได้ถามเกี่ยวกับการปรับแต่งประสิทธิภาพของแอพเฉพาะ (ซึ่งเป็นเหตุผลที่ฉันถามที่นี่มากกว่า SO) แต่เพิ่มเติมเกี่ยวกับว่าลักษณะภาษาของ Objective-C กีดกันวิธีการออกแบบที่แน่นอนหรือไม่ ฉันได้สังเกตว่ารหัสส่วนใหญ่ที่ฉันเห็นจาก Apple และฝ่ายอื่น ๆ (ใน GitHub ฯลฯ ) มีแนวโน้มที่จะใช้วิธีการขนาดใหญ่ (และคลาส) และฉันสงสัยว่านี่เป็นอคติที่ได้พุ่งขึ้นเพราะภาษา ตัวเอง แน่นอนฉันอาจได้อ่านรหัสผิดหรืออาจเป็นวัฒนธรรมมากกว่าปัจจัยทางเทคนิคที่นำไปสู่แนวโน้มถ้ามันมีอยู่

(สำหรับสิ่งที่คุ้มค่าฉันกำลังเขียน Objective-C และฉันใช้วิธีการเล็ก ๆ )

ขอเพิ่มเติม

ฉันเห็นด้วยกับคำตอบทั้งสองที่ได้รับ อีกสิ่งหนึ่งที่ฉันต้องการคือให้ใครบางคนชี้ให้ฉันไปที่โอเพ่นซอร์ส (หรือหวังว่าจะเป็นกอบเป็นกำ) โอเพนซอร์ส (หรือมองเห็นได้) Objective-C codebase ที่ใช้วิธีการสั้น ๆ ที่ดี (และคลาสเล็ก) ฉันไม่ได้เห็นอะไรใน Objective-C ยังไม่ได้เปรียบเทียบกับ (ตัวอย่าง) แหล่งฟิตเนส


1
ไมค์แอชมีบางส่วนคู่ของโพสต์ที่ดีที่แสดงให้เห็นตัวเลขสำหรับเสือดาวและiOS ฉันไม่ได้ย่อยข้อมูลเหล่านี้ทั้งหมด แต่ดูเหมือนว่าสำหรับแคช IMPs ค่าใช้จ่ายจะเล็กน้อยและแม้จะต้องใช้การค้นหาก็มีขนาดเล็ก หากการแสดงผลอย่างรวดเร็วนี้ถูกต้องดูเหมือนว่าวิธีการขนาดเล็กอาจยืนหรือล้มลงในพื้นที่การออกแบบเดียวกันใน ObjC เช่นเดียวกับในภาษาอื่น ๆ
Cris

1
หากคุณต้องการหลีกเลี่ยงค่าใช้จ่ายนั้นให้ใช้ฟังก์ชั่น C
rightfold

เป็นไปได้ทางเทคนิค แต่มีฟังก์ชั่นมากมายที่หายไป ฉันจะแทนที่วิธีด้วยฟังก์ชั่นสำหรับส่วนของรหัสที่มีความอ่อนไหวต่อประสิทธิภาพ ฉันถามที่นี่เกี่ยวกับว่าค่าใช้จ่ายเป็นปัญหาเพียงพอหรือไม่ที่จะพิจารณารูปแบบการเข้ารหัส / การออกแบบที่ต้องการ
Cris

ดูต้นทุนของการส่งข้อความใน Objective-Cบน SO เพื่อหาคำตอบที่ดี
คาเลบ

ทำไมคุณไม่เพียงแค่กรอกรหัสใน Xcode? ฉันเข้าใจว่าคุณถามนามธรรมและไม่เกี่ยวกับรหัสเฉพาะ แต่เนื่องจากคุณได้รับรหัสบางอย่างด้วยวิธีการเล็ก ๆ มากมายทำไมไม่ลองใช้มันดูด้วยตัวคุณเอง?
คาเลบ

คำตอบ:


4

ฉันไม่รู้จริงๆว่าค่าใช้จ่ายนั้นเล็กน้อยหรือไม่ แต่ฉันต้องการออกแบบระบบให้เข้าใจได้ง่ายและบำรุงรักษาได้ ก่อนและโดยปกติจะหมายถึงวิธีการเรียนและการเรียนขนาดเล็ก สิ่งนี้จะช่วยในการปรับแต่งรหัสตามมาด้วย (เพียงเพราะรหัสสามารถบำรุงรักษาได้มากกว่า) นอกจากนี้เป็นสิ่งสำคัญที่จะต้องใส่รหัสเพื่อค้นหาคอขวดจริงซึ่งอาจไม่เกี่ยวข้องกับค่าใช้จ่ายในการเรียกใช้เมธอด หากคุณทำการดำเนินการนอกกระบวนการใด ๆ (เช่นการเรียกไปยังฐานข้อมูล, เครือข่าย, ระบบไฟล์) สิ่งเหล่านี้มีแนวโน้มที่จะครอบงำรันไทม์ของโปรแกรมต่อไป

แต่ตามปกติไมล์สะสมของคุณอาจแตกต่างกันไป ...


แน่นอนฉันเห็นด้วยกับสิ่งนี้ทั้งหมด (ดูอ้างอิง 'ลุงบ๊อบ' ในคำถาม) แต่ถ้าภาษาไม่ให้ยืมโดยทั่วไปกับวิธีการออกแบบที่ดีที่สุดผู้เขียนโปรแกรมอาจเลือกตัวเลือกอื่น ฉันไม่เห็นรหัส Objective-C มากที่ติดตามวิธีการเล็ก ๆ (และคลาสสำหรับวิธีการที่สำคัญ) และสงสัยว่าทำไม ฉันจะเพิ่มบันทึกย่อให้กับคำถาม
Cris

@ คริส: "ฉันไม่ได้เห็นรหัส Objective-C มากที่จริงตามวิธีการเล็ก ๆ " -> แค่อยากรู้: จากสิ่งที่ร่างกายของรหัสคุณวาดข้อสรุปดังกล่าวหรือไม่ ฉันเชื่อในมัน แต่ฉันก็เชื่อว่าไม่ใช่เพราะการรับรู้การเพิ่มประสิทธิภาพขนาดเล็ก แต่โปรแกรมเมอร์จำนวนมากไม่ได้มุ่งเน้นไปที่การออกแบบและการบำรุงรักษาที่ดี วางไว้อีกทางหนึ่งของพวกเขา Java, C #, ทับทิมหรืออะไรก็ตามรหัสต้องเป็นไปตามแนวทางปฏิบัติเดียวกัน ...
Jordão

ใช่มันเป็นไปได้ทีเดียว ฉันไม่มี codebase เฉพาะในใจ สิ่งที่ฉันได้ดูตลอดทั้งปีหรือดังนั้นฉันจึงทำงานกับ Objective-C ชุดโค้ดที่ใหญ่ที่สุดที่ฉันเคยดูคือกลุ่มโอเพ่นซอร์สของกลุ่ม Omni และ IIRC ที่มีวิธีการมากมาย โค้ดตัวอย่างของ Apple ก็มักจะทำเช่นกัน แต่แน่นอน (a) โค้ดตัวอย่างเป็นเพียงแค่นั้นและ (b) ตัวอย่างของฉันอาจมีน้ำหนักต่อโค้ด UI ดูตัวควบคุมโดยเฉพาะและสิ่งเหล่านี้อาจมีรหัสแตกต่างจากเลเยอร์ที่ลึกกว่า
Cris

2

ส่วนใหญ่ของรหัสจะไม่เป็นสิ่งสำคัญต่อประสิทธิภาพในการใช้งานใด ๆดังนั้นแม้ว่าวิธีการค่าใช้จ่ายอย่างมีนัยสำคัญเมื่อเทียบกับภาษาอื่น ๆ วิธีการที่ดีที่สุดจะยังคงมีวิธีการขนาดเล็กจำนวนมากในสถานที่ส่วนใหญ่และแบบอินไลน์เท่านั้น แสดงให้เห็นว่ามีความสำคัญต่อประสิทธิภาพ

แน่นอนว่ามีหลายคนที่ไม่ทราบวิธีการปรับให้เหมาะสมอย่างเหมาะสมและบางคนอาจรู้เกี่ยวกับวิธีการใช้จ่ายและมีส่วนร่วมในการเพิ่มประสิทธิภาพก่อนวัยอันควรทั่วโลก แต่ฉันไม่เชื่อว่ากลุ่มมีขนาดใหญ่พอที่จะมีผลกระทบอย่างมีนัยสำคัญ บนระบบนิเวศวัตถุประสงค์ -C

วิธีการที่มีขนาดใหญ่และการเรียนที่อยู่ห่างไกลมีแนวโน้มที่จะทำงานของกลุ่มใหญ่ของคนที่รู้หรือไม่มีอะไรเกี่ยวกับการดูแลโปรวิธีการค่าใช้จ่ายหรือการออกแบบที่เหมาะสมและผู้ที่จะมีแนวโน้มที่จะผลิตลูกบิ๊กของโคลนในใด ๆภาษา และใช่บางคนทำงานกับฐานรหัสสูงใน บริษัท ซอฟต์แวร์รายใหญ่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.