จะอ้างถึง ByRef และ ByVal ในฉลากแบบเลื่อนลงได้อย่างไร [ปิด]


9

MSDNหน้าByRefและByValคำหลักที่ไม่เป็นประโยชน์มาก ยกเว้นว่าฉันจะข้ามไปพวกเขาจะถูกเรียกว่า "คำหลัก" ทุกที่

หนึ่งในผู้สนับสนุนหลักของโครงการRubberduckกำลังทำงานในการปรับโครงสร้างEncapsulate Field ที่น่าสนใจมากและ UI ก็เข้ากันได้ดีมาก .. ยกเว้นฉันมีปัญหากับป้ายกำกับด้านบนรายการแบบเลื่อนลงสำหรับByRef/ ByValซึ่งระบุว่า "การเข้าถึง":

กล่องโต้ตอบการรีแฟคเตอร์ "Encapsulate Field" ของ Rubberduck

ฉันไม่ชอบ "การเข้าถึง" เพราะฉันใช้ที่อื่นเพื่อPublic/ Private/ Friendเข้าถึงตัวดัดแปลงที่ให้ความรู้สึกแม่นยำมากขึ้น

ฉันไม่ต้องการใช้ "ตัวแก้ไข" เนื่องจาก IMO เป็นเพียงย่อสำหรับ "ตัวดัดแปลงการเข้าถึง"

ฉันต้องการให้ป้ายกำกับนั้นถูกต้อง แต่ดูเหมือนว่าคำศัพท์ของฉันจะขาดหายไปและฉันไม่รู้ว่าจะเรียกคำหลักเหล่านี้ว่าอะไร

ป้ายกำกับนี้ควรบอกว่าอะไรว่าถูกต้อง คำที่ฉันกำลังมองหาคืออะไร? "ครอบครัวของคำหลัก" ทำByRef/ ByValเป็นของอะไร


2
ในฐานะที่เป็นหนึ่งในความคิดเห็นกล่าวว่ามันไม่ควรจะอยู่ที่นั่น - ByRef สำหรับสถานที่ให้บริการเป็นบิตบ้า ถ้าเป็นไปได้มันเป็นความชั่วร้าย - อนุญาตให้คุณเปลี่ยนตัวแปรของผู้โทรโดยที่พวกเขาไม่รู้
jmoreno

เอกสารจำนวนมากใน "VB Universe" (ดังนั้นไม่ใช่เฉพาะ VBA) ดูเหมือนจะอ้างถึงสิ่งนี้ว่า "กลไกการส่งผ่าน"
Damien_The_Unbeliever

@jmoreno ฉันเห็นด้วยอย่างสมบูรณ์ ฉันจะทำให้มันByValไม่มีความเป็นไปได้ที่จะเปลี่ยนเป็นByRefอื่นนอกเหนือจากการแก้ไขรหัสที่สร้างขึ้นด้วยตนเองและ "แก้ไขปัญหา"! VBA สามารถรวบรวมเรื่องไร้สาระอันร้ายกาจจำนวนมหาศาลที่คุณรู้ :-) ยังฉันชอบที่ในที่สุดก็มีสถานที่ออนไลน์ที่ใส่ชื่อคำหลักเหล่านี้
Mathieu Guindon

คำตอบ:


14

ในกรณีนี้ฉันจะใช้ "Pass As" (หรือ "Pass")

คุณมีโฟลว์ที่ตรงกับการใช้งานนี้อย่างสมบูรณ์แบบ

  • ชื่อตัวแปร : foo
  • ผ่านเป็น: ByVal / Pass: ByRef

เหมาะกับเวิร์กโฟลว์ของคุณอย่างสมบูรณ์แบบและบังเอิญเป็นสิ่งที่บทความที่คุณอ้างถึงบ่งชี้

เมื่อคุณอ่านตัวเลือกของคุณมันจะอ่านได้อย่างสมบูรณ์แบบเมื่อใช้ 'ส่งผ่าน' เนื่องจากคุณสามารถอ่านส่วนหัวและเลือกข้อความได้อย่างเหมาะสม - "'ชื่อตัวแปร' foo, 'ส่งผ่านค่า'

ถ้าคุณอยากจะทำให้มันเล็กน้อยอ่านดีกว่าที่คุณจะทำให้ตัวเลือกรายการของคุณ "คุ้มค่า" และ "อ้างอิง" ขึ้นอยู่กับว่ากลุ่มเป้าหมายของคุณคือการเขียนโปรแกรม VBA หรือโปรแกรมเมอร์ไม่ใช่ VBA ที่อาจจะเล็กน้อยไม่คุ้นเคยกับ ByVal และ ByRef คำหลัก

หรือมิฉะนั้นให้เปลี่ยนเป็น "ผ่าน:" และทำให้เป็น "ตามการอ้างอิง (ByRef)" และ "ตามมูลค่า (ByVal)" ในรายการแบบเลื่อนลง ดูเหมือนว่ารายการดรอปดาวน์ของคุณมีพื้นที่ว่างที่จะแสดงข้อความทั้งหมดนี้ หรือเพียงแค่คำหลัก ByRef / ByVal


ฉันจะใช้ "Pass as ByVal" หรือ "Pass by value" "ผ่าน ByVal" ฟังดูแปลก ๆ
user253751

@ กลไกการโทรที่ดี!
enderland

3
นอกจากนี้คุณอาจพิจารณาปุ่มตัวเลือกแทนที่จะเป็นแบบเลื่อนลงเนื่องจากมีตัวเลือกน้อย
Kyralessa

@Kyralessa นั่นคือสิ่งที่ฉันบอก Mat ในการแชทด้วย และฉันคิดว่าเป็นสิ่งที่พวกเขาไปด้วยสำหรับการออกแบบขั้นสุดท้าย :-)
enderland

5

ฉันจะใช้คำใดคำหนึ่งในสามคำนี้เพื่อติดป้ายกำกับให้เลือก:

  1. อรรถศาสตร์
  2. ผ่าน
  3. ตัวดัดแปลงพารามิเตอร์

ฉันชอบ "Semantics"
Mathieu Guindon

ฉันชอบ "พารามิเตอร์ตัวแก้ไข"

3

"Pass By Semantics" อาจใกล้เคียงที่สุดกับสิ่งที่คุณกำลังมองหา


argh ขโมยหมวกจัดส่งที่รวดเร็วของฉัน! Eeeeevil!
จิมมี่ฮอฟฟา

2
ฉันมีแล้วมีความสุขที่จะให้คุณคนนี้ ...
Oded

3

คำที่ถูกต้องที่สุดและเป็นทางการสำหรับเรื่องนี้คือ "ซีแมนทิสต์ซีแมนติก"

เมื่อByRefมีการใช้ชื่อภายในฟังก์ชั่นจะเป็นนามแฝงสำหรับตัวแปรของผู้โทร - การเปลี่ยนแปลงทั้งหมดของทั้งสองจะปรากฏขึ้นทันที ด้วยByValชื่อภายในฟังก์ชั่นเป็นสำเนาที่แตกต่างกันของตัวแปรของผู้โทร (แน่นอนทั้งสำเนาของผู้โทรและฟังก์ชั่นอาจอ้างถึงวัตถุเดียวกัน แต่มีความแตกต่างในการกำหนดพารามิเตอร์ภายในฟังก์ชั่นใหม่ไม่ได้กำหนดตัวแปรของผู้โทร )

ตัวเลือกจะเป็น

  • นามแฝง ( ByRef)
  • คัดลอก ( ByVal)

บางแพลตฟอร์มเพิ่มความเป็นไปได้ที่สามโดยที่ aliasing ตัวแปรของผู้โทรเสร็จ แต่ไม่อนุญาตให้ใช้พารามิเตอร์มากกว่าหนึ่งตัวในนามแฝงของวัตถุที่ทับซ้อนกัน (แนวคิดที่อยู่เบื้องหลังrestrictคำหลักC หนึ่งยังพบสิ่งนี้ใน IDL ซึ่งเป็นคำหลักคุณลักษณะunique) .NET ไม่มีวิธีที่ดีในการเข้ารหัสความรู้นี้


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