タグ付けされた質問 「optional」

値または参照を含むことができる不変の型。このタイプの各インスタンスには、null以外の値または参照が含まれるか、何も含まれません(この場合、参照は「存在しない」と言います。「nullを含む」とは言われません)。

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
「暗黙的にアンラップされたオプション」を作成する理由は、値があることがわかっているからです。
通常の変数または定数だけを作成するのではなく、「暗黙的にアンラップされたオプション」を作成するのはなぜですか?正常にアンラップできることがわかっている場合は、なぜ最初にオプションを作成するのですか?たとえば、これはなぜですか: let someString: String! = "this is the string" より便利になるでしょう: let someString: String = "this is the string" 「オプションが定数または変数が「値なし」を許可されていることを示す」場合でも、「プログラムの構造から、オプションがその値が最初に設定された後は常に値を持つことが明らかである場合があります」、のポイントは何ですかそもそもそれをオプションにしていますか?オプションが常に値を持つことを知っているなら、それはオプションではないのではないですか?

18
引数でJava 8のオプションを使用しない理由
多くのWebサイトで読みましたOptionalは戻り値の型としてのみ使用し、メソッドの引数では使用しないでください。論理的な理由を見つけるのに苦労しています。たとえば、2つのオプションパラメータを持つロジックがあります。したがって、次のようにメソッドシグネチャを記述することは理にかなっていると思います(ソリューション1): public int calculateSomething(Optional<String> p1, Optional<BigDecimal> p2 { // my logic } 多くのWebページでは、オプションをメソッドの引数として使用しないでください。これを念頭に置いて、次のメソッドシグネチャを使用して明確なJavadocコメントを追加し、引数がnullになる可能性があることを指定します。将来のメンテナがJavadocを読み、引数を使用する前に常にnullチェックを実行することを期待します(解決策2) : public int calculateSomething(String p1, BigDecimal p2) { // my logic } または、より良いインターフェイスを提供し、p1とp2がオプションであることをより明確にするために、メソッドを4つのパブリックメソッドに置き換えることもできます(ソリューション3)。 public int calculateSomething() { calculateSomething(null, null); } public int calculateSomething(String p1) { calculateSomething(p1, null); } public int calculateSomething(BigDecimal p2) { calculateSomething(null, p2); } public …
392 java  java-8  optional 


11
Java 8のOptional.ifPresentおよびif-not-Presentの機能スタイル?
Java 8では、Optionalオブジェクトが存在する場合は何かを行い、存在しない場合は別のことを行います。 if (opt.isPresent()) { System.out.println("found"); } else { System.out.println("Not found"); } ただし、これは「機能的なスタイル」ではありません。 OptionalifPresent()メソッドを持っていますが、メソッドをチェーンできません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( () -> { System.out.println("create new obj"); dao.save(new obj); return null; }); …

13
オプションの用途
6か月以上Java 8を使用しているので、新しいAPIの変更にかなり満足しています。私がまだ確信していない領域の1つは、いつ使用するかOptionalです。どこにでもそれを使いたいのかnull、どこにも使いたくないのか、どんどん変わっていくようです。 私がそれを使用できる状況はたくさんあるようで、それが利点(読みやすさ/ 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; } 4-でCollections: 一般的に私は思いません: List<Optional<Foo>> 何かを追加します-特に値のfilter()削除nullなどに使用できますがOptional、コレクションでの良い使用法はありますか? 私が見逃したケースはありますか?
271 java  java-8  optional 

13
Swiftのオプション値とは何ですか?
Appleのドキュメントから: ifとをlet一緒に使用して、欠落している可能性のある値を処理できます。これらの値はオプションとして表されます。オプションの値には、値が含まnilれるか、値が欠落していることを示すためにが含まれます。?値のタイプの後に疑問符()を記述して、値をオプションとしてマークします。 オプションの値を使用する理由は何ですか?
267 swift  optional 

4
Optional.ofNullableではなくOptional.ofを使用する理由
Java 8 Optionalクラスを使用する場合、オプションで値をラップする方法は2つあります。 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()投げたことがないNoSuchElementExceptionとisPresent()常にtrueを返します...しかし、明らかにそのない、それだけを返すTようにorElse())。 私が見逃している他の違いはありますか?
206 java  java-8  optional 

5
Swiftのオプションのエスケープクロージャーパラメーター
与えられた: 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
Swiftのifステートメント内で複数のlet-asを使用する
私は辞書から2つの値をアンラップしていて、それらを使用する前に、それらをキャストして正しいタイプかどうかをテストする必要があります。これは私が思いついたものです: 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 } } ただし、クエリを1つにまとめる場合は、2つをパックします。だからそれはそのようなものになるでしょう: if let latitudeDouble = latitude as? Double, longitudeDouble = longitude as? Double { // …

4
Swiftのオプションのデフォルト値を提供していますか?
Swiftでオプションを処理するためのイディオムは過度に冗長に見えますが、それがnilの場合にデフォルト値を指定するだけの場合は、次のようになります。 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のOptionモナド(基本的にはSwiftのOptionalと同じ考え方です)には、getOrElseこの目的のためのメソッドがあります。 val myValue = optionalValue.getOrElse(defaultValue) …
141 swift  optional 

6
JavaではオプションのorElse
私はJava 8で新しいOptional型を使用していて、機能的にサポートされていない一般的な操作のように思われるものに遭遇しました:「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(); } そのようなメソッドが存在しない理由があるのか​​、意図せずにOptionalを使用しているだけなのか、そしてこのケースに対処するために人々が他にどのようにしてきたのか、私は興味があります。 私のコードで作業している人々は必ずしもそれらが存在することを知っているとは限らないため、カスタムユーティリティクラス/メソッドを含むソリューションはエレガントではないと思います。 また、誰かが知っている場合、そのようなメソッドはJDK 9に含まれますか?また、どこでそのようなメソッドを提案できますか?これは、APIのかなりの省略のように思えます。
137 java  lambda  java-8  optional  java-9 

14
Swift:nilのオプションをテストする
私はXcode 6 Beta 4を使用しています。オプションを適切にテストする方法を理解できないという奇妙な状況があります。 オプションのxyzがある場合、テストする正しい方法です。 if (xyz) // Do something または if (xyz != nil) // Do something ドキュメントは最初の方法でそれを行うと書いていますが、2番目の方法が必要な場合があり、コンパイラエラーが発生しないこともありますが、2番目の方法ではコンパイラエラーが発生することもあります。 私の具体的な例は、迅速にブリッジされるGData XMLパーサーを使用することです。 let xml = GDataXMLDocument( XMLString: responseBody, options: 0, error: &xmlError); if (xmlError != nil) ここで、私がやった場合: if xmlError 常にtrueを返します。ただし、私が行う場合: if (xmlError != nil) 次に、(Objective-Cでの動作と同様に)動作します。 GData XMLに何かあり、それが欠けているオプションを処理する方法はありますか?
137 ios  swift  optional 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.