Microsoft ท้อใจใช้ 'var' ใน C # หรือไม่ (VS2017)


16

ฉันกำลังมองหาที่จะเกิดขึ้นในVisual Studio 2017

ภายใต้ส่วนชื่อเพิ่มประสิทธิภาพการผลิตจะมีภาพของ Visual Studio ที่ใช้ในการแทนที่var ที่เกิดขึ้นทั้งหมดด้วยประเภทที่ชัดเจน

เพิ่มประสิทธิภาพการผลิต VS2017

เห็นได้ชัดว่ารหัสมีปัญหาหลายอย่างที่ Visual Studio ระบุว่า 'ต้องการแก้ไข'

ฉันต้องการที่จะตรวจสอบความเข้าใจของฉันใช้varใน C # ดังนั้นผมอ่านบทความจากปี 2011 โดยเอริค Lippert เรียกว่าการใช้ประโยชน์และ misuses ของการพิมพ์โดยปริยาย

Eric พูดว่า:

  • ใช้ var เมื่อคุณต้อง; เมื่อคุณใช้ประเภทที่ไม่ระบุชื่อ
  • ใช้ var เมื่อชนิดของการประกาศชัดเจนจาก initializer โดยเฉพาะอย่างยิ่งถ้าเป็นการสร้างวัตถุ สิ่งนี้ช่วยลดความซ้ำซ้อน
  • พิจารณาใช้ var หากรหัสเน้นความหมายของ "จุดประสงค์ทางธุรกิจ" ของตัวแปรและอธิบายรายละเอียด "กลไก" ของที่เก็บข้อมูล
  • ใช้ประเภทที่ชัดเจนหากจำเป็นเพื่อให้เข้าใจและบำรุงรักษารหัสได้อย่างถูกต้อง
  • ใช้ชื่อตัวแปรอธิบายโดยไม่คำนึงว่าคุณใช้“ var” ชื่อตัวแปรควรแสดงถึงความหมายของตัวแปรไม่ใช่รายละเอียดของที่เก็บ “ เลขฐานสิบ” ไม่ดี; “ อัตราดอกเบี้ย” นั้นดี

ฉันคิดว่าการใช้งานvarส่วนใหญ่ในรหัสนั้นน่าจะใช้ได้ ฉันคิดว่ามันคงโอเคที่จะไม่ใช้varสำหรับบิตที่อ่าน ...

var tweetReady = workouts [ ... ]

... เพราะบางทีมันอาจจะไม่ 100% ทันทีสิ่งที่พิมพ์เป็น booleanแต่ถึงอย่างนั้นฉันรู้ว่าสวยได้อย่างรวดเร็วว่ามันเป็น

การใช้งานvarสำหรับส่วนนี้ ...

var listOfTweets = new List<string>();

... ดูเหมือนว่าฉันจะชอบการใช้งานvar ที่ดีเพราะฉันคิดว่ามันซ้ำซ้อนที่จะทำสิ่งต่อไปนี้:

List<string> listOfTweets = new List<string>();

แม้ว่าตามสิ่งที่เอริคกล่าวว่าตัวแปรอาจจะทวีตมากกว่าlistOfTweets

อะไรคือสาเหตุของการเปลี่ยนแปลงการvarใช้งานทั้งหมดที่นี่? มีบางอย่างผิดปกติกับรหัสนี้ที่ฉันหายไปหรือไม่


รหัสในสกรีนช็อตนั้นเป็นสิ่งที่คุณเห็นด้วยและไม่ควรใช้ ...
Telastyn

1
ฉันคิดว่าการใช้ทั้งหมดของvarที่นี่ดี คุณสามารถเปลี่ยนได้ - แต่ถึงอย่างนั้นฉันก็คิดว่ามันไม่จำเป็นจริงๆ ทำไมเปลี่ยนพวกเขาทั้งหมดเป็นประเภทที่ชัดเจน?
Rowan Freeman

2
โปรดจำไว้ว่าสิ่งที่เห็นได้ชัดสำหรับมนุษย์นั้นไม่ได้ปรากฏในสตูดิโอภาพเสมอไป
candied_orange

ทั้งหมดหรือไม่ คุณมีข้อผิดพลาดหนึ่งข้อในสกรีนช็อตที่สัมพันธ์กันอย่างชัดเจน
Telastyn

มันไม่ใช่ข้อผิดพลาด แต่อย่างใด แต่เป็นการเตือนถึงการเรียงลำดับที่คุณคาดหวังว่าจะให้ชี้ให้เห็น ตามภาพทุกคนvarsถูกทำเครื่องหมายด้วยวิธีเดียวกัน; พร้อมเครื่องหมายกากบาทเตือนเดียวกันถัดจากพวกเขาและขีดเส้นใต้สีแดง Visual Studio น่าจะต้องการแก้ไขทั้งหมดด้วยวิธีเดียวกัน ถ้าฉันเข้าใจผิด
โรวันฟรีแมน

คำตอบ:


27

TL; DR: ไม่, Microsoft ไม่สนับสนุนการใช้ 'var' ใน C # รูปภาพไม่มีบริบทที่จะอธิบายว่าทำไมจึงบ่น

หากคุณติดตั้ง VS2017 RC และเปิดแผงตัวเลือกและไปที่คุณจะเห็นส่วนใหม่:Text Editor -> C# Code Styleสิ่งนี้คล้ายกับสิ่งที่ ReSharper เสนอมาระยะหนึ่ง: ชุดของกฎที่กำหนดค่าได้สำหรับรูปแบบการเข้ารหัส

มันมีสามตัวเลือกรอบการใช้ var : สำหรับชนิดบิลด์อินเมื่อประเภทตัวแปรนั้นชัดเจนและ "ที่อื่น" ในแต่ละกรณีคุณสามารถระบุ "ชอบประเภทที่ชัดเจน" หรือ "ชอบ var" และตั้งค่าระดับการแจ้งเตือนเป็น "ไม่มี", "ข้อเสนอแนะ", "คำเตือน" หรือ "ข้อผิดพลาด":

ป้อนคำอธิบายรูปภาพที่นี่


3
ค่าเริ่มต้นคืออะไร ถ้า "การตั้งค่าจากโรงงาน" คือ "ชอบประเภทอย่างชัดเจน" MS varแล้วมันอาจจะแย้งจะท้อใจการใช้งานของ
JacquesB

@JacquesB ค่าเริ่มต้นดังที่แสดงในภาพหน้าจอ เนื่องจากทั้งหมดถูกตั้งค่าเป็น "ไม่มี" จึงเป็นการยากที่จะรู้ว่า "ประเภทที่ต้องการชัดแจ้ง" ถูกตั้งค่าอย่างแข็งขันตามวิธีที่ MS ต้องการหรือว่าเป็นเพียง "ค่าศูนย์" เท่าที่ฉันเป็นห่วง devs ที่ดีที่สุดชอบทั้งหมดvarดังนั้นฉันไม่สนใจว่ามุมมองของ MS ในเรื่องนี้คืออะไร
David Arno

6

ฉันคิดว่าคุณอ่านมากเกินไป ดังนั้นจึงมีคุณสมบัติที่ช่วยให้คุณสามารถแทนที่ประเพณีการพิมพ์โดยนัยด้วยคำอธิบายประกอบประเภทที่ชัดเจนและคุณสรุปได้ว่าการพิมพ์โดยนัยนั้นไม่สนับสนุน นอกจากนี้ยังมีคุณสมบัติในการคอมไพล์รหัสC♯ถึง CIL ด้วยคุณจะสรุปได้ไหมว่าC♯นั้นหมดกำลังใจและเราทุกคนควรเขียน CIL bytecode แทน? อาจจะไม่.

Microsoft เพียงแสดงความเข้าใจอย่างลึกซึ้งที่ IDE มีในรหัสของคุณ มันยังสามารถเขียนประเภทของคุณโดยที่คุณไม่ต้องสะกดมัน แค่นั้นแหละ.

นี่เป็นเพียงตัวอย่างที่ดีในการแสดงความสามารถในการเข้าใจโค้ดของ IDE มันมีขนาดเล็กและอยู่ในตัวเอง (ต่างจากการแสดง refactoring ที่ใหญ่กว่า) มีให้ในทุกรุ่นและใช้ได้กับนักพัฒนาทุกคน (ต่างจากคุณสมบัติการสร้างภาพทางสถาปัตยกรรมที่น่าประทับใจมาก ๆ ที่มีเฉพาะใน Ultimate และไม่สามารถใช้ได้กับส่วนที่สำคัญ ของผู้ใช้ที่มีศักยภาพของ VS ซึ่งจะไม่มีโครงการขนาดใหญ่) และถึงแม้ว่ามันจะง่ายมาก (มันคือการทำสิ่งเดียวกันกับที่csc.exeเคยทำมาตั้งแต่varถูกนำมาใช้) มันดูน่าประทับใจโดยเฉพาะอย่างยิ่งกับคนที่ไม่เข้าใจการพิมพ์โดยนัยและการอนุมานประเภท (หรือผู้ที่พยายามที่จะ google "การอนุมานแบบ" และได้รับข้อตกลงเช่น Hindley-Milner การรวมกันการย้อนรอยเมื่อในความเป็นจริง C♯ของการอนุมานท้องถิ่นเพียงอย่างเดียวคืออย่างมากง่ายและตรงไปตรงมา)

ในระยะสั้น: มันเป็นวิธีที่รวดเร็วในการแสดงคุณสมบัติ IDE

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