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

ประเภทที่ไม่เปลี่ยนรูปซึ่งอาจมีค่าหรือข้อมูลอ้างอิง แต่ละอินสแตนซ์ของประเภทนี้มีค่าหรือการอ้างอิงที่ไม่ใช่ค่าว่างหรือไม่มีอะไรเลย (ซึ่งในกรณีนี้เราบอกว่าการอ้างอิงนั้น "ไม่มี" ไม่มีการกล่าวว่า "มีค่าว่าง")

22
เครื่องหมายอัศเจรีย์หมายถึงอะไรในภาษา Swift
คู่มือภาษาโปรแกรม Swiftมีตัวอย่างดังต่อไปนี้: class Person { let name: String init(name: String) { self.name = name } var apartment: Apartment? deinit { println("\(name) is being deinitialized") } } class Apartment { let number: Int init(number: Int) { self.number = number } var tenant: Person? deinit { println("Apartment #\(number) is being deinitialized") } …

10
ทำไมต้องสร้าง“ ตัวเลือก Unwrapped นัย” โดยนัยเนื่องจากนั่นหมายความว่าคุณรู้ว่ามีค่า
ทำไมคุณต้องสร้าง "ตัวเลือก Unwrapped ทางเลือก" โดยปริยายเมื่อสร้างตัวแปรหรือค่าคงที่ปกติ? หากคุณรู้ว่าสามารถถอดออกได้สำเร็จทำไมสร้างตัวเลือกตั้งแต่แรก ตัวอย่างเช่นทำไมจึงเป็นเช่นนี้: let someString: String! = "this is the string" จะเป็นประโยชน์มากกว่า: let someString: String = "this is the string" หาก” ตัวเลือกบ่งชี้ว่าค่าคงที่หรือตัวแปรได้รับอนุญาตให้มี 'ไม่มีค่า'” แต่“ บางครั้งก็ชัดเจนจากโครงสร้างของโปรแกรมที่ตัวเลือกจะมีค่าหลังจากค่านั้นถูกตั้งค่าครั้งแรก” สิ่งที่เป็นจุดของ ทำให้เป็นตัวเลือกในตอนแรกหรือไม่ หากคุณรู้ว่าตัวเลือกจะมีค่าอยู่ตลอดไม่ว่าจะเป็นตัวเลือกหรือไม่

18
ทำไมตัวเลือก Java 8 จึงไม่ควรใช้ในการโต้แย้ง
ฉันได้อ่านบนเว็บไซต์หลายแห่งทางเลือกควรใช้เป็นประเภทส่งคืนเท่านั้นและไม่ได้ใช้ในการโต้แย้งเมธอด ฉันกำลังดิ้นรนเพื่อหาเหตุผลเชิงเหตุผล ตัวอย่างเช่นฉันมีชิ้นส่วนของตรรกะซึ่งมี 2 พารามิเตอร์ทางเลือก ดังนั้นฉันคิดว่ามันสมเหตุสมผลที่จะเขียนลายเซ็นวิธีของฉันเช่นนี้ (โซลูชันที่ 1): public int calculateSomething(Optional<String> p1, Optional<BigDecimal> p2 { // my logic } หน้าเว็บจำนวนมากระบุตัวเลือกที่ไม่ควรใช้เป็นข้อโต้แย้งวิธี ด้วยสิ่งนี้ในใจฉันสามารถใช้ลายเซ็นวิธีการต่อไปนี้และเพิ่มความคิดเห็น Javadoc ที่ชัดเจนเพื่อระบุว่าอาร์กิวเมนต์อาจเป็นโมฆะหวังว่าผู้ดูแลในอนาคตจะอ่าน Javadoc ดังนั้นจึงต้องทำการตรวจสอบ null ก่อนที่จะใช้อาร์กิวเมนต์ (โซลูชัน 2) : public int calculateSomething(String p1, BigDecimal p2) { // my logic } หรือฉันสามารถแทนที่วิธีของฉันด้วยวิธีสาธารณะสี่วิธีเพื่อให้อินเทอร์เฟซที่ดีกว่าและทำให้ p1 และ p2 ชัดเจนยิ่งขึ้นเป็นตัวเลือก (โซลูชัน 3): public int …
392 java  java-8  optional 

5
Java 8 getters ส่งคืนชนิดตัวเลือกหรือไม่?
Optional type ที่แนะนำใน Java 8 เป็นสิ่งใหม่สำหรับนักพัฒนาหลายคน เป็นวิธีการทะเยอทะยานกลับOptional<Foo>ประเภทในสถานที่ของคลาสสิกFooการปฏิบัติที่ดี? nullสมมติว่าค่าที่สามารถ

11
รูปแบบการใช้งานของ Java 8's Optional.ifPresent และ if-not-Present?
ใน Java 8 ฉันต้องการทำบางสิ่งกับOptionalวัตถุถ้ามีอยู่และทำสิ่งอื่นหากไม่มีอยู่ if (opt.isPresent()) { System.out.println("found"); } else { System.out.println("Not found"); } แม้ว่านี่จะไม่ใช่ 'สไตล์การทำงาน' ก็ตาม OptionalมีifPresent()วิธีการ แต่ฉันไม่สามารถเชื่อมโยงorElse()วิธีการใด ๆ ดังนั้นฉันไม่สามารถเขียน: opt.ifPresent( x -> System.out.println("found " + x)) .orElse( System.out.println("NOT FOUND")); ในการตอบกลับถึง @assylias ฉันไม่คิดว่าจะOptional.map()ทำงานได้ในกรณีต่อไปนี้: opt.map( o -> { System.out.println("while opt is present..."); o.setProperty(xxx); dao.update(o); return null; }).orElseGet( () -> { …

13
ใช้เป็นทางเลือก
เมื่อใช้ Java 8 มาเป็นเวลา 6 เดือนหรือมากกว่านั้นฉันมีความสุขมากกับการเปลี่ยนแปลง API ใหม่ Optionalหนึ่งในพื้นที่ที่ฉันยังคงไม่มั่นใจในความเป็นเมื่อมีการใช้งาน ดูเหมือนว่าฉันจะแกว่งไปมาระหว่างที่ต้องการใช้มันทุกที่ที่เป็นไปได้nullและไม่มีที่ไหนเลย ดูเหมือนจะมีหลายสถานการณ์ที่ฉันสามารถใช้งานได้และฉันไม่แน่ใจว่ามันจะเพิ่มประโยชน์ (ความปลอดภัยในการอ่าน / ความปลอดภัยเป็นโมฆะ) หรือเพียงแค่ทำให้เกิดค่าใช้จ่ายเพิ่มเติม ดังนั้นฉันมีตัวอย่างเล็ก ๆ น้อย ๆ และฉันสนใจในความคิดของชุมชนว่าOptionalมีประโยชน์หรือไม่ 1 - ในฐานะที่เป็นวิธีการที่สาธารณะประเภทกลับเมื่อวิธีการที่จะกลับมาnull: public Optional<Foo> findFoo(String id); 2 - เป็นพารามิเตอร์เมธอดเมื่อพารามิเตอร์อาจเป็นnull: public Foo doSomething(String id, Optional<Bar> barOptional); 3 - ในฐานะสมาชิกเสริมของ bean: public class Book { private List<Pages> pages; private Optional<Index> index; …
271 java  java-8  optional 

13
ค่าทางเลือกใน Swift คืออะไร
จากเอกสารของ Apple : คุณสามารถใช้ifและletร่วมกันทำงานกับค่าที่อาจหายไป ค่าเหล่านี้แสดงเป็นตัวเลือก ค่าที่เป็นทางเลือกอาจมีค่าหรือมีnilเพื่อระบุว่าค่านั้นหายไป เขียนเครื่องหมายคำถาม ( ?) หลังประเภทของค่าเพื่อทำเครื่องหมายค่าเป็นตัวเลือก ทำไมคุณต้องการใช้ค่าที่เป็นทางเลือก
267 swift  optional 

4
เหตุใดจึงต้องใช้ตัวเลือกมากกว่าตัวเลือก
เมื่อใช้OptionalคลาสJava 8 มีสองวิธีในการห่อค่าในตัวเลือก String foobar = <value or null>; Optional.of(foobar); // May throw NullPointerException Optional.ofNullable(foobar); // Safe from NullPointerException ฉันเข้าใจว่าOptional.ofNullableเป็นวิธีเดียวที่ปลอดภัยในการใช้Optionalแต่ทำไมถึงOptional.ofมีอยู่จริง? ทำไมไม่ใช้เพียงOptional.ofNullable และอยู่ข้างปลอดภัยตลอดเวลา?

8
ความแตกต่างระหว่าง `Optional.orElse ()` และ `Optional.orElseGet () '
ฉันพยายามเข้าใจความแตกต่างระหว่างOptional<T>.orElse()และOptional<T>.orElseGet()วิธีการ คำอธิบายสำหรับorElse()วิธีการคือ"ส่งคืนค่าถ้ามีมิฉะนั้นส่งคืนค่าอื่น" ในขณะที่คำอธิบายสำหรับorElseGet()วิธีการคือ"ส่งคืนค่าถ้ามีมิฉะนั้นให้เรียกใช้วิธีอื่นและส่งคืนผลลัพธ์ของการเรียกใช้นั้น" orElseGet()วิธีการใช้อินเตอร์เฟซที่ใช้งานได้ผู้ผลิตซึ่งเป็นหลักไม่ใช้พารามิเตอร์ใด ๆ Tและผลตอบแทน คุณจะต้องใช้ในสถานการณ์orElseGet()ใด หากคุณมีวิธีการที่T myDefault()ทำไมคุณจะไม่เพียงแค่ทำoptional.orElse(myDefault())มากกว่าoptional.orElseGet(() -> myDefault())? ดูเหมือนจะไม่orElseGet()เป็นการเลื่อนการดำเนินการของแลมบ์ดาไปในภายหลังหรือบางสิ่งบางอย่างดังนั้นประเด็นของมันคืออะไร? (ฉันคิดว่ามันจะมีประโยชน์มากขึ้นถ้ามันคืนความปลอดภัยOptional<T>ที่get()ไม่เคยขว้าง a NoSuchElementExceptionและisPresent()กลับมาจริงเสมอ ... แต่เห็นได้ชัดว่าไม่ใช่มันแค่คืนTเหมือนorElse()) มีความแตกต่างอื่น ๆ ที่ฉันหายไปหรือไม่?
206 java  java-8  optional 

5
พารามิเตอร์การปิดการหลบหลีกที่รวดเร็วและเป็นตัวเลือก
ได้รับ: typealias Action = () -> () var action: Action = { } func doStuff(stuff: String, completion: @escaping Action) { print(stuff) action = completion completion() } func doStuffAgain() { print("again") action() } doStuff(stuff: "do stuff") { print("swift 3!") } doStuffAgain() มีวิธีใดที่จะทำให้completionพารามิเตอร์ (และaction) ของประเภทAction?และเก็บไว้ด้วย@escaping? การเปลี่ยนชนิดจะทำให้เกิดข้อผิดพลาดต่อไปนี้: คุณลักษณะ @escaping ใช้กับประเภทฟังก์ชันเท่านั้น การลบ@escapingแอ็ตทริบิวต์โค้ดจะคอมไพล์และรัน แต่ดูเหมือนจะไม่ถูกต้องเนื่องจากการcompletionปิดกำลังหลบหนีขอบเขตของฟังก์ชัน


3
ใช้หลาย let-as ภายในคำสั่ง if ใน Swift
ฉันกำลังแกะค่าสองค่าจากพจนานุกรมและก่อนที่จะใช้พวกเขาฉันต้องใช้ค่าเหล่านั้นและทดสอบประเภทที่ถูกต้อง นี่คือสิ่งที่ฉันมาด้วย: var latitude : AnyObject! = imageDictionary["latitude"] var longitude : AnyObject! = imageDictionary["longitude"] if let latitudeDouble = latitude as? Double { if let longitudeDouble = longitude as? Double { // do stuff here } } แต่ฉันต้องการที่จะแพ็คทั้งสองถ้าให้คำสั่งเป็นหนึ่ง ดังนั้นมันจะเป็นอย่างนั้น: if let latitudeDouble = latitude as? Double, longitudeDouble = longitude as? Double …

4
ระบุค่าเริ่มต้นสำหรับตัวเลือกใน Swift หรือไม่
สำนวนสำหรับการจัดการกับตัวเลือกใน Swift ดูเหมือนจะละเอียดเกินไปหากสิ่งที่คุณต้องการทำคือให้ค่าเริ่มต้นในกรณีที่ไม่มีค่า: if let value = optionalValue { // do something with 'value' } else { // do the same thing with your default value } ซึ่งเกี่ยวข้องกับการทำซ้ำรหัสโดยไม่จำเป็นหรือ var unwrappedValue if let value = optionalValue { unwrappedValue = value } else { unwrappedValue = defaultValue } ซึ่งต้องunwrappedValueไม่คงที่ ตัวเลือกของ Scala monad …
141 swift  optional 

6
ทางเลือก orElse ทางเลือกใน Java
ฉันได้ทำงานกับประเภทตัวเลือกใหม่ใน Java 8และฉันได้พบกับสิ่งที่ดูเหมือนเป็นการดำเนินการทั่วไปที่ไม่รองรับฟังก์ชัน: an "orElseOptional" พิจารณารูปแบบต่อไปนี้: Optional<Result> resultFromServiceA = serviceA(args); if (resultFromServiceA.isPresent) return result; else { Optional<Result> resultFromServiceB = serviceB(args); if (resultFromServiceB.isPresent) return resultFromServiceB; else return serviceC(args); } รูปแบบนี้มีหลายรูปแบบ แต่ต้องการให้ "orElse" เป็นทางเลือกที่ใช้ฟังก์ชันสร้างทางเลือกใหม่ซึ่งเรียกว่าเมื่อไม่มีรูปแบบปัจจุบันเท่านั้น การใช้งานจะมีลักษณะดังนี้: public Optional<T> orElse(Supplier<Optional<? extends T>> otherSupplier) { return value != null ? this : other.get(); } ฉันอยากรู้ว่ามีเหตุผลที่วิธีการดังกล่าวไม่มีอยู่จริงหรือไม่ถ้าฉันแค่ใช้ตัวเลือกเสริมโดยไม่ได้ตั้งใจและวิธีอื่น …
138 java  lambda  java-8  optional  java-9 

14
Swift: ตัวเลือกการทดสอบสำหรับศูนย์
ฉันใช้ Xcode 6 Beta 4 ฉันมีสถานการณ์แปลก ๆ นี้ซึ่งฉันไม่สามารถหาวิธีทดสอบตัวเลือกได้อย่างเหมาะสม หากฉันมี xyz ที่เป็นทางเลือกคือวิธีทดสอบที่ถูกต้อง: if (xyz) // Do something หรือ if (xyz != nil) // Do something เอกสารบอกว่าให้ทำวิธีแรก แต่ฉันพบว่าบางครั้งต้องใช้วิธีที่สองและไม่สร้างข้อผิดพลาดของคอมไพเลอร์ แต่ในบางครั้งวิธีที่สองจะสร้างข้อผิดพลาดของคอมไพเลอร์ ตัวอย่างเฉพาะของฉันคือการใช้ตัวแยกวิเคราะห์ GData XML เชื่อมต่ออย่างรวดเร็ว: let xml = GDataXMLDocument( XMLString: responseBody, options: 0, error: &xmlError); if (xmlError != nil) ที่นี่ถ้าฉันเพิ่งทำ: if xmlError มันจะกลับมาเป็นจริงเสมอ อย่างไรก็ตามถ้าฉันทำ: …
138 ios  swift  optional 

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