คำถามติดแท็ก null

Null คือการไม่มีค่า โดยทั่วไปจะใช้ Null เพื่อระบุว่าการอ้างอิงหรือตัวแปรชี้ชี้ไปที่วัตถุในหน่วยความจำ

10
ประเภท nullable จะดีกว่าตัวเลขมายากล?
ฉันมีการถกเถียงกันเล็กน้อยกับเพื่อนร่วมงานเมื่อเร็ว ๆ นี้ เราใช้ C # โดยเฉพาะ แต่สิ่งนี้สามารถนำไปใช้กับภาษาใด ๆ ที่มีประเภท nullable พูดเช่นคุณมีค่าที่แสดงถึงสูงสุด อย่างไรก็ตามค่าสูงสุดนี้เป็นทางเลือก ฉันยืนยันว่าเป็นจำนวนโมฆะจะดีกว่า เพื่อนร่วมงานของฉันสนับสนุนการใช้ศูนย์โดยอ้างถึงแบบอย่าง ได้รับสิ่งต่าง ๆ เช่นซ็อกเก็ตเครือข่ายมักจะใช้ศูนย์เพื่อเป็นตัวแทนของการหมดเวลาไม่ จำกัด ถ้าฉันจะเขียนโค้ดเกี่ยวกับซ็อกเก็ตวันนี้ฉันจะใช้ค่าที่ไม่สามารถใช้งานได้เองเพราะฉันรู้สึกว่ามันจะเป็นตัวแทนของความจริงที่ว่าไม่มีการหมดเวลา ตัวแทนคนไหนดีกว่ากัน? ทั้งสองต้องมีการตรวจสอบเงื่อนไขสำหรับค่าความหมาย "none" แต่ฉันเชื่อว่าประเภท nullable บ่งบอกถึงความตั้งใจดีขึ้นเล็กน้อย

3
C # 8 การอ้างอิงที่ไม่เป็นโมฆะและรูปแบบลอง
มีรูปแบบในคลาส C # เป็นแบบสุดขั้วโดยDictionary.TryGetValueและint.TryParse: วิธีการส่งคืนบูลีนที่ระบุความสำเร็จของการดำเนินการและพารามิเตอร์ out ที่มีผลลัพธ์จริง หากการดำเนินการล้มเหลวพารามิเตอร์ out จะถูกตั้งค่าเป็น null สมมติว่าฉันใช้การอ้างอิงที่ไม่ใช่โมฆะ C # 8 และต้องการเขียนวิธี TryParse สำหรับคลาสของฉันเอง ถูกต้องลายเซ็นคือ: public static bool TryParse(string s, out MyClass? result); เนื่องจากผลลัพธ์เป็น null ในกรณีเท็จตัวแปร out ต้องถูกทำเครื่องหมายเป็น nullable อย่างไรก็ตามโดยทั่วไปจะใช้รูปแบบลองดังนี้: if (MyClass.TryParse(s, out var result)) { // use result here } เนื่องจากฉันป้อนสาขาเมื่อการดำเนินการสำเร็จผลลัพธ์ไม่ควรเป็นโมฆะในสาขานั้น แต่เนื่องจากฉันทำเครื่องหมายว่าเป็นโมฆะฉันจึงต้องตรวจสอบสิ่งนั้นหรือใช้!เพื่อแทนที่: if (MyClass.TryParse(s, out …
22 c#  .net  null 

6
การตรวจสอบ“ โมฆะ” ใน C หรือ C ++ หมายถึงอะไร
ฉันได้เรียนรู้ภาษาซีพลัสพลัสและฉันก็เข้าใจปัญหาได้ยาก โดยเฉพาะอย่างยิ่งบทเรียนที่ฉันได้อ่านพูดถึงการทำ "ตรวจสอบโมฆะ" แต่ฉันไม่แน่ใจว่ามันหมายถึงอะไรหรือทำไมมันจำเป็น อะไรที่เป็นโมฆะ? "ตรวจสอบค่าว่าง" หมายความว่าอย่างไร ฉันจำเป็นต้องตรวจสอบค่าว่างเสมอหรือไม่? ตัวอย่างโค้ดใด ๆ จะได้รับการชื่นชมมาก
21 c++  c  null 

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

11
วิธีที่ดีที่สุดในการจัดการ nulls ใน Java? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ฉันมีรหัสที่ล้มเหลวเพราะ NullPointerException มีการเรียกวิธีการบนวัตถุที่วัตถุนั้นไม่มีอยู่ อย่างไรก็ตามสิ่งนี้ทำให้ฉันคิดถึงวิธีที่ดีที่สุดในการแก้ไขปัญหานี้ ฉันควรจะป้องกันโค้ดสำหรับ nulls เสมอหรือไม่เพื่อที่ฉันจะได้รหัสในอนาคตสำหรับข้อยกเว้นตัวชี้ null หรือฉันควรแก้ไขสาเหตุของ null เพื่อไม่ให้เกิด downstream คุณคิดยังไง?
21 java  null 

4
ฉันควรเก็บ False เป็น Null ในฟิลด์ฐานข้อมูลบูลีนหรือไม่
สมมติว่าคุณมีโปรแกรมประยุกต์ที่มีสนามบูลีนในของมันตารางเรียกว่าUserInactive มีอะไรผิดปกติหรือเปล่าที่เพียงแค่เก็บเป็นเท็จเป็นโมฆะ? ถ้าเป็นเช่นนั้นคุณช่วยอธิบายว่าอะไรควรลง? ฉันได้พูดคุยเรื่องนี้กับใครบางคนเมื่อไม่กี่เดือนที่ผ่านมาและเราทั้งคู่เห็นพ้องต้องกันว่ามันไม่สำคัญตราบใดที่คุณทำอย่างสม่ำเสมอตลอดทั้งแอป / ฐานข้อมูล เมื่อเร็ว ๆ นี้บางคนที่ฉันรู้ว่าถูกเน้นว่า "จริง" trueหรือfalseควรจะใช้ แต่พวกเขาไม่ได้ให้คำอธิบายว่าทำไม

2
ตรวจสอบพารามิเตอร์ที่ใส่คำอธิบายประกอบด้วย @Nonnull เป็นค่าว่างหรือไม่
เราได้เริ่มใช้ FindBugs และใส่คำอธิบายประกอบพารามิเตอร์ของเรา@Nonnullอย่างเหมาะสมและใช้งานได้ดีในการชี้จุดบกพร่องในช่วงต้นรอบ จนถึงตอนนี้เราได้ตรวจสอบข้อโต้แย้งเหล่านี้อย่างต่อเนื่องเพื่อnullใช้ของ Guava checkNotNullแต่ฉันต้องการตรวจสอบnullเฉพาะที่ขอบ - สถานที่ที่ค่าสามารถเข้ามาโดยไม่ได้รับการตรวจสอบnullเช่นคำขอ SOAP // service layer accessible from outside public Person createPerson(@CheckForNull String name) { return new Person(Preconditions.checkNotNull(name)); } ... // internal constructor accessed only by the service layer public Person(@Nonnull String name) { this.name = Preconditions.checkNotNull(name); // remove this check? } ฉันเข้าใจ@Nonnullว่าไม่ได้บล็อกnullค่าตัวเอง แต่ให้ที่ …
19 java  null 

8
เมื่อใดควรตรวจสอบพอยน์เตอร์สำหรับ NULL ใน C
สรุป : ควรฟังก์ชั่นใน C ตรวจสอบอยู่เสมอเพื่อให้แน่ใจว่าไม่ได้อ้างอิงNULLตัวชี้? หากไม่เหมาะสมที่จะข้ามการตรวจสอบเหล่านี้ รายละเอียด : ฉันได้อ่านหนังสือบางเล่มเกี่ยวกับการสัมภาษณ์การเขียนโปรแกรมและฉันสงสัยว่าระดับการตรวจสอบอินพุตที่เหมาะสมสำหรับอาร์กิวเมนต์ของฟังก์ชันใน C คืออะไร เห็นได้ชัดว่าฟังก์ชั่นใด ๆ ที่รับอินพุตจากผู้ใช้จำเป็นต้องทำการตรวจสอบความถูกต้องรวมถึงการตรวจสอบพอยน์เตอร์NULLก่อนที่จะทำการยกเลิกการอ้างอิง แต่ในกรณีของฟังก์ชั่นภายในไฟล์เดียวกันที่คุณไม่คาดว่าจะเปิดเผยผ่าน API ของคุณล่ะ ตัวอย่างเช่นต่อไปนี้ปรากฏในซอร์สโค้ดของ git: static unsigned short graph_get_current_column_color(const struct git_graph *graph) { if (!want_color(graph->revs->diffopt.use_color)) return column_colors_max; return graph->default_column_color; } หาก*graphเป็นNULLตัวชี้ Null จะถูกยกเลิกการพิจารณาอาจทำให้โปรแกรมขัดข้อง แต่อาจส่งผลให้เกิดพฤติกรรมที่คาดเดาไม่ได้อื่น ๆ ในทางกลับกันฟังก์ชั่นคือstaticดังนั้นโปรแกรมเมอร์อาจตรวจสอบอินพุตแล้ว ฉันไม่รู้ฉันเพิ่งเลือกแบบสุ่มเพราะมันเป็นตัวอย่างสั้น ๆ ในแอปพลิเคชันโปรแกรมที่เขียนใน C. ฉันเห็นสถานที่อื่น ๆ อีกหลายแห่งที่มีการใช้พอยน์เตอร์โดยไม่ตรวจสอบค่า NULL คำถามของฉันทั่วไปไม่เฉพาะเจาะจงกับส่วนรหัสนี้ ผมเห็นถามคำถามที่คล้ายกันในบริบทของการยกเว้นการมอบ …
18 c  validation  null 

4
ทำไม Java String จึงไม่มีวิธีการจัดการสตริงแบบคงที่
ทำไมนักออกแบบ Javaไม่สร้างวิธีการจัดการสตริงแบบคงที่ในjava.lang.Stringคลาส? วิธีการต่อไปนี้เป็นสิ่งที่ฉันอ้างถึง แต่คำถามสามารถขยายไปยังวิธีการไม่คงที่อื่น ๆ ในชั้นเรียนเช่นกัน concat(String) substring(int, int) replace(char, char) toLowerCase() replace(CharSequence, CharSequence) toLowerCase(Locale) replaceAll(String, String) toString() replaceFirst(String, String) toUpperCase() split(String) toUpperCase(Locale) split(String, int) trim() substring(int) การมีวิธีการเหล่านี้ในเวอร์ชันที่ไม่คงที่เท่านั้นจะบังคับให้มีการตรวจสอบ Null อย่างชัดเจนไม่ว่าที่ใดก็ต้องเรียกใช้ ยกตัวอย่างเช่นเพียงแค่โทรexample = example.trim()จะนำไปสู่NullPointerExceptionString example = nullถ้า ดังนั้นโปรแกรมเมอร์จะต้องทำการตรวจสอบ boilerplate null ต่อไปนี้: if (example != null) example = example.trim(); // OR: example …
17 java  api-design  null 

4
ดึงค่าโดยไม่ต้องตรวจสอบเป็นโมฆะใน Java
หลายครั้งที่ฉันตรวจสอบตัวเองเป็นโมฆะเมื่อดึงค่าจากลำดับชั้นข้อมูลบางอย่างเพื่อหลีกเลี่ยง NullPointerExceptions ซึ่งฉันพบว่ามีแนวโน้มที่จะเกิดข้อผิดพลาดและต้องมีสำเร็จรูปจำนวนมาก ฉันได้เขียนกิจวัตรที่ง่ายมากซึ่งทำให้ฉันสามารถข้ามการตรวจสอบค่าว่างเมื่อดึงวัตถุ ... public final class NoNPE { public static <T> T get(NoNPEInterface<T> in) { try { return in.get(); } catch (NullPointerException e) { return null; } } public interface NoNPEInterface<T> { T get(); } } ฉันใช้มันแบบนี้ ... Room room = NoNPE.get(() -> country.getTown().getHouses().get(0).getLivingRoom()); ด้านบนทำให้ฉันได้รับวัตถุห้องหรือโมฆะโดยไม่ต้องตรวจสอบระดับผู้ปกครองทั้งหมด คุณคิดอย่างไรกับข้างต้น? ฉันกำลังสร้างรูปแบบที่มีปัญหาหรือไม่? มีวิธีที่ดีกว่านี้ในความคิดของคุณ?
15 java  null 

5
การสืบทอด vs คุณสมบัติเพิ่มเติมที่มีค่า Null
สำหรับคลาสที่มีฟิลด์เป็นตัวเลือกจะดีกว่าถ้าใช้การสืบทอดหรือคุณสมบัติที่เป็นโมฆะ? ลองพิจารณาตัวอย่างนี้: class Book { private String name; } class BookWithColor extends Book { private String color; } หรือ class Book { private String name; private String color; //when this is null then it is "Book" otherwise "BookWithColor" } หรือ class Book { private String name; private Optional<String> color; //when …
12 java  inheritance  class  null 

4
ความแตกต่างระหว่างตัวชี้ที่ชี้ไปยังตำแหน่ง 0x0 และตัวชี้ถูกตั้งค่าเป็น NULL คืออะไร
ตัวชี้ชี้ไปที่ 0x0000 เหมือนกับตัวชี้ที่ตั้งค่าเป็น NULL หรือไม่ ถ้าค่า NULL ถูกกำหนดในภาษา C แปลตำแหน่งทางกายภาพเป็นอะไร มันเหมือนกับ 0x0000 ฉันจะหารายละเอียดเพิ่มเติมเกี่ยวกับแนวคิดเหล่านี้ได้ที่ไหน
12 c  pointers  null 

1
อะไรคือสัญชาติญาณที่สนับสนุนการเรียกตัวสร้างบางทีใน Haskell“ Just”?
สัญชาตญาณของประเภทที่เป็นตัวเลือกเช่นเดียวกับMaybe Intที่ไม่มี Int (เช่นนั้นNothingมี) หรือว่ามีInt บางตัว มีบางสิ่งที่นั่น มันทำให้ฉันรู้สึกว่าเราเรียก constructor ชนิดสำหรับ "เชิงลบ" กรณีNothingเพราะมันหมายความว่าที่ - ว่าไม่มีIntมี แต่ใช้คำว่าทำไมเพียงแค่ในกรณีที่เน้นอยู่ในสิ่งที่เป็นจริงมี ? สำหรับฉันคำว่า "เพิ่ง" มีความหมายแฝงอยู่ว่าสิ่งที่อธิบายนั้นน้อยกว่าทางเลือก ตรงกันข้ามกับสิ่งที่อยู่ที่นั่นจริง ๆ ; ตัวอย่างเช่น, ตอบ: คุณกำลังทำอะไรคืนนี้ B: ไม่; ฉันแค่จะอยู่ในและดูทีวี ตอบ: คุณตรวจสอบเสียงผีที่น่าขนลุกรอบ ๆ บ้านของคุณหรือไม่? B: ใช่ปรากฎว่ามันเป็นแค่นกฮูก เห็นได้ชัดว่าฉันขาดสัญชาตญาณสิ่งที่ตัวเลือกการตั้งชื่อนี้มีพื้นฐานมาจาก มันคืออะไร? เพราะให้ฉันคำเพียงหมายถึงตรงข้ามของวิธีการที่จะนำมาใช้ในที่Maybeประเภท

4
Ruby: if variable vs if variable.nil?
ฉันใหม่กับทับทิมและฉันรู้สึกประหลาดใจเมื่อฉันพบว่าวัตถุทั้งหมดเป็นจริงนอกเหนือจากศูนย์และเท็จ แม้แต่ 0 ก็จริง สิ่งที่ดีเกี่ยวกับคุณสมบัติของภาษานั้นคือคุณสามารถเขียน: if !variable # do stuff when variable is nil end เพื่อนร่วมงานของฉันซึ่งเป็นนักพัฒนาทับทิมรุ่นเก๋ามากขึ้นยืนยันว่าฉันควรเลือกสิ่งนั้นแทนที่จะใช้. ชอบมาก: if variable.nil? # do stuff when variable is nil end อย่างไรก็ตามฉันเชื่อว่าอันหลังเป็นตัวเลือกที่ดีกว่าด้วยเหตุผลสองประการ: 1. ฉันคิดว่ามันเป็นเชิงวัตถุมากกว่าโดยเฉพาะในภาษาอย่าง Ruby ซึ่งทุกอย่างเป็นการแลกเปลี่ยนวัตถุและข้อความ 2. มันสามารถอ่านได้มากขึ้นในความเห็นของฉันแม้ว่าจะมีขนาดเล็กลงก็ตาม ฉันกำลังทำผิดพลาด "มือใหม่" ที่นี่?

10
ข้อ จำกัด ด้านความปลอดภัยควรทำให้บริการส่งคืน null หรือมีข้อผิดพลาดหรือไม่? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ฉันกำลังขัดแย้งกับนักพัฒนาที่มีประสบการณ์มากกว่าในเรื่องนี้และสงสัยว่าคนอื่นคิดอย่างไรกับมัน สภาพแวดล้อมของเราคือ Java, EJB 3, บริการและอื่น ๆ รหัสที่ฉันเขียนเรียกบริการเพื่อรับสิ่งของและสร้างสิ่งต่าง ๆ ปัญหาที่ฉันพบคือฉันได้รับข้อยกเว้นตัวชี้ null ซึ่งไม่สมเหตุสมผล ตัวอย่างเช่นเมื่อฉันขอให้บริการเพื่อสร้างวัตถุฉันได้รับกลับมาเป็นโมฆะ; เมื่อฉันพยายามค้นหาวัตถุที่มีรหัสที่ถูกต้องที่รู้จักฉันได้รับ null กลับ ฉันใช้เวลาพยายามหาสิ่งที่ผิดพลาดในรหัสของฉัน ตั้งแต่ฉันมีประสบการณ์น้อยฉันมักจะคิดว่าฉันทำอะไรผิด แต่กลับกลายเป็นว่าเหตุผลที่ผลตอบแทน Null คือความปลอดภัย หากผู้ใช้หลักที่ใช้บริการของฉันไม่ได้รับสิทธิ์ที่ถูกต้องสำหรับบริการเป้าหมายมันจะส่งคืนค่าว่าง บริการอื่น ๆ ส่วนใหญ่ที่นี่ไม่ได้รับการบันทึกไว้เป็นอย่างดีดังนั้นจึงเห็นได้ชัดว่านี่เป็นสิ่งที่คุณต้องรู้ สิ่งนี้ค่อนข้างสับสนในฐานะนักพัฒนาที่เขียนโค้ดที่โต้ตอบกับบริการ มันจะสมเหตุสมผลมากกว่าสำหรับฉันถ้าบริการนี้เป็นข้อยกเว้นที่จะบอกฉันว่าผู้ใช้ไม่มีสิทธิ์ที่เหมาะสมในการโหลดสิ่งนี้หรือเพื่อสร้างสิ่งนั้น ฉันจะทราบได้ทันทีว่าเหตุใดบริการของฉันจึงไม่ทำงานตามที่คาดไว้ นักพัฒนาที่มีประสบการณ์มากขึ้นซึ่งเขียนบริการแย้งว่าการขอข้อมูลไม่ใช่เงื่อนไขข้อผิดพลาดและข้อยกเว้นนั้นควรถูกส่งไปในเงื่อนไขข้อผิดพลาดเท่านั้นไม่ใช่เมื่อผู้ใช้ไม่สามารถเข้าถึงข้อมูลได้ ข้อมูลนี้มักจะถูกค้นหาใน GUI และสำหรับผู้ใช้ที่ไม่มีสิทธิ์ที่ถูกต้องสิ่งเหล่านี้ก็คือ "ไม่มีตัวตน" ดังนั้นในระยะสั้น: ถามไม่ผิดดังนั้นไม่มีข้อยกเว้น รับเมธอดส่งคืน null เนื่องจากสำหรับผู้ใช้เหล่านั้นสิ่งเหล่านั้น "ไม่มีอยู่" สร้างเมธอดส่งคืนค่าว่างเมื่อผู้ใช้ไม่ได้รับอนุญาตให้สร้างสิ่งนั้น นี่เป็นเรื่องปกติและ / หรือแนวปฏิบัติที่ดีหรือไม่? …

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