ऑप्शन टाइप: Difference between revisions

From Vigyanwiki
m (Abhishek moved page विकल्प प्रकार to ऑप्शन टाइप without leaving a redirect)
No edit summary
 
(20 intermediate revisions by 5 users not shown)
Line 1: Line 1:
{{Short description|Encapsulation of an optional value in programming or type theory}}
{{Short description|Encapsulation of an optional value in programming or type theory}}
{{for|families of option contracts in finance|Option style}}
[[प्रोग्रामिंग भाषा|प्रोग्रामिंग भाषाओं]] (विशेष रूप से कार्यात्मक प्रोग्रामिंग भाषाओं) एवं [[प्रकार सिद्धांत|टाइप सिद्धांत]] में, '''ऑप्शन टाइप''' या संभवतः टाइप [[पैरामीट्रिक बहुरूपता]] है जो किसी वैकल्पिक मूल्य के एनकैप्सुलेशन का प्रतिनिधित्व करता है; उदाहरण के लिए, इसका उपयोग रिटर्न टाइप के कार्यों के रूप में किया जाता है जो प्रारम्भ होने पर सार्थक मूल्य वापस कर सकते हैं या नहीं। इसमें कंस्ट्रक्टर होता है जो या तो रिक्त होता है (प्रायः नामित <code>None</code> या <code>Nothing</code>), जो मूल डेटा <code>A</code>को  <code>Just A</code> या <code>Some A</code>के टाइप में समाहित करता है I
{{multiple issues|section=|
{{More citations needed|date=July 2019}}
{{Original research|date=July 2019}}
}}
[[प्रोग्रामिंग भाषा]]ओं (विशेष रूप से [[कार्यात्मक प्रोग्रामिंग]] भाषाओं) और [[प्रकार सिद्धांत]] में, एक विकल्प प्रकार या शायद प्रकार एक [[पैरामीट्रिक बहुरूपता]] है जो एक वैकल्पिक मूल्य के एनकैप्सुलेशन का प्रतिनिधित्व करता है; उदाहरण के लिए, इसका उपयोग रिटर्न प्रकार के कार्यों के रूप में किया जाता है जो लागू होने पर सार्थक मूल्य वापस कर सकते हैं या नहीं। इसमें एक कंस्ट्रक्टर होता है जो या तो खाली होता है (अक्सर नामित <code>None</code> या <code>Nothing</code>), या जो मूल डेटा प्रकार को समाहित करता है <code>A</code> (अक्सर लिखा जाता है <code>Just A</code> या <code>Some A</code>).


कार्यात्मक प्रोग्रामिंग के बाहर एक विशिष्ट, लेकिन संबंधित अवधारणा, जो वस्तु-उन्मुख प्रोग्रामिंग में लोकप्रिय है, को [[अशक्त प्रकार]] कहा जाता है (अक्सर व्यक्त किया जाता है) <code>A?</code>). विकल्प प्रकार और अशक्त प्रकार के बीच मुख्य अंतर यह है कि विकल्प प्रकार नेस्टिंग का समर्थन करता है (उदा। <code>Maybe (Maybe String)</code> ≠ <code>Maybe String</code>), जबकि अशक्त प्रकार नहीं (उदा। <code>String??</code> = <code>String?</code>).
कार्यात्मक प्रोग्रामिंग के बाहर विशिष्ट, किन्तु संबंधित अवधारणा, जो वस्तु-उन्मुख प्रोग्रामिंग में लोकप्रिय है, को [[अशक्त प्रकार|अदृढ़ टाइप]] कहा जाता है (प्रायः व्यक्त किया जाता हैI) <code>A</code> ऑप्शन टाइप एवं अदृढ़ टाइप के मध्य मुख्य अंतर यह है कि ऑप्शन टाइप नेस्टिंग का समर्थन करता है (उदा <code>Maybe (Maybe String)</code> ≠ <code>Maybe String</code>), जबकि अदृढ़ टाइप नहीं करता है (उदा- <code>String??</code> = <code>String?</code>) I


== सैद्धांतिक पहलू ==
== सैद्धांतिक दृष्टिकोण ==
{{multiple issues|section=yes|{{Importance section|section|date=July 2019}}
टाइप सिद्धांत में, इसे इस टाइप लिखा जा सकता है: <math>A^{?} = A + 1</math> यह इस तथ्य को व्यक्त करता है कि मूल्यों के दिए गए समूह के लिए <math>A</math>, किसी ऑप्शन टाइप के लिए मान्य, मानों के समूह में अतिरिक्त मान (रिक्त मान) जोड़ता है <math>A</math> यह प्रोग्रामिंग में इस तथ्य से प्रमाणित होता है कि [[टैग की गई यूनियन]] वाली भाषाओं में, ऑप्शन टाइपों को इनकैप्सुलेटेड टाइप के टैग किए गए, संघ एवं [[इकाई प्रकार|इकाई टाइप]] के रूप में व्यक्त किया जा सकता है।<ref>{{cite web|url=https://bartoszmilewski.com/2015/01/13/simple-algebraic-data-types/|title=Simple Algebraic Data Types|last=Milewski|first=Bartosz|date=2015-01-13|website=Bartosz Milewski's Programming Cafe|at=Sum types. "We could have encoded Maybe as: data Maybe a = Either () a"|language=en|archive-url=https://web.archive.org/web/20190818084741/https://bartoszmilewski.com/2015/01/13/simple-algebraic-data-types/|archive-date=2019-08-18|url-status=live|access-date=2019-08-18}}</ref> करी-हावर्ड पत्राचार में, ऑप्शन टाइप ∨: x∨1=1 के [[अवशोषण कानून|अवशोषण नियम]] से संबंधित हैं। ऑप्शन टाइप को [[संग्रह (सार डेटा प्रकार)|संग्रह (सार डेटा टाइप)]] के रूप में भी देखा जा सकता है जिसमें शून्य तत्व होते हैं। ऑप्शन टाइप भी परिव्राजक है जहाँ:<ref>{{cite web|url=http://www.learnyouahaskell.com/a-fistful-of-monads|title=A Fistful of Monads - Learn You a Haskell for Great Good!|website=www.learnyouahaskell.com|access-date=2019-08-18}}</ref>
{{Original research|section|date=August 2019}}}}
return = Just -- Wraps the value into a maybe
Nothing  >>= f = Nothing -- Fails if the previous monad fails


प्रकार सिद्धांत में, इसे इस प्रकार लिखा जा सकता है: <math>A^{?} = A + 1</math>. यह इस तथ्य को व्यक्त करता है कि मूल्यों के दिए गए सेट के लिए <math>A</math>, एक विकल्प प्रकार के लिए मान्य मानों के सेट में ठीक एक अतिरिक्त मान (खाली मान) जोड़ता है <math>A</math>. यह प्रोग्रामिंग में इस तथ्य से परिलक्षित होता है कि [[टैग की गई यूनियन]]ों वाली भाषाओं में, विकल्प प्रकारों को इनकैप्सुलेटेड प्रकार के टैग किए गए संघ और एक [[इकाई प्रकार]] के रूप में व्यक्त किया जा सकता है।<ref>{{cite web|url=https://bartoszmilewski.com/2015/01/13/simple-algebraic-data-types/|title=Simple Algebraic Data Types|last=Milewski|first=Bartosz|date=2015-01-13|website=Bartosz Milewski's Programming Cafe|at=Sum types. "We could have encoded Maybe as: data Maybe a = Either () a"|language=en|archive-url=https://web.archive.org/web/20190818084741/https://bartoszmilewski.com/2015/01/13/simple-algebraic-data-types/|archive-date=2019-08-18|url-status=live|access-date=2019-08-18}}</ref>
(Just x) >>= f = f x    -- Succeeds when both monads succeed 
करी-हावर्ड पत्राचार में, विकल्प प्रकार ∨: x∨1=1 के [[अवशोषण कानून]] से संबंधित हैं।{{How|date=August 2019|title=It is unclear how this is the case, and there are no links to external references that explain this.}}
ऑप्शन टाइप की मोनैडिक प्रकृति कुशलतापूर्वक विफलता एवं त्रुटियों को ट्रैक करने के लिए उपयोगी होती है।<ref>{{cite web|url=https://www.youtube.com/watch?v=t1e8gqXLbsU |archive-url=https://ghostarchive.org/varchive/youtube/20211220/t1e8gqXLbsU |archive-date=2021-12-20 |url-status=live|title=What is a Monad?|last=Hutton|first=Graham|date=Nov 25, 2017|website=Computerphile Youtube|access-date=Aug 18, 2019}}{{cbignore}}</ref>
एक विकल्प प्रकार को एक [[संग्रह (सार डेटा प्रकार)]] के रूप में भी देखा जा सकता है जिसमें एक या शून्य तत्व होते हैं।{{Original research inline|date=July 2019}}
विकल्प प्रकार भी शायद एक सन्यासी है जहाँ:<ref>{{cite web|url=http://www.learnyouahaskell.com/a-fistful-of-monads|title=A Fistful of Monads - Learn You a Haskell for Great Good!|website=www.learnyouahaskell.com|access-date=2019-08-18}}</ref>
<वाक्यविन्यास लैंग = हैकेल>
वापसी = बस - मूल्य को शायद में लपेटता है


कुछ नहीं >> = एफ = कुछ भी नहीं - विफल रहता है अगर पिछला मोनाड विफल हो जाता है
(सिर्फ एक्स) >>= एफ = एफ एक्स - सफल होता है जब दोनों मोनैड सफल होते हैं
</वाक्यविन्यास हाइलाइट>


विकल्प प्रकार की मोनैडिक प्रकृति कुशलतापूर्वक विफलता और त्रुटियों को ट्रैक करने के लिए उपयोगी है।<ref>{{cite web|url=https://www.youtube.com/watch?v=t1e8gqXLbsU |archive-url=https://ghostarchive.org/varchive/youtube/20211220/t1e8gqXLbsU |archive-date=2021-12-20 |url-status=live|title=What is a Monad?|last=Hutton|first=Graham|date=Nov 25, 2017|website=Computerphile Youtube|access-date=Aug 18, 2019}}{{cbignore}}</ref>
== उदाहरण ==




== उदाहरण ==
<!--
Gentle reminder to not add language examples that do not satisfy the laws.
If you do not know what this means, please refrain from adding examples.


List of things that are NOT option types and therefore do not need to be added:
=== एजीडीए (AGDA)  ===
- std::optional<T> in C++
{{Further|एजीडीए (Agda) (प्रोग्रामिंग भाषा)}}
- Nullable<T> (T?) in C#
- Null (T?) in Dart
- Optional<T> in Java
- Nullable{T} in Julia
- Nullable types (T?) in Kotlin
- typing.Optional[T] (T | None) in Python
- Definiteness (:D) in Raku
-->


एजीडीए (Agda) में ऑप्शन टाइप का नाम दिया गया है {{code|2=agda|Maybe}} वेरिएंट के साथ {{code|2=agda|nothing}} एवं {{code|2=agda|just a}} वेरिएंट है।


=== आमंत्रित करें ===
=== C ++ ===
{{Expand section|with=example usage|date=July 2022}}
सी++ 17 के पश्चात से, ऑप्शन टाइप को मानक लाइब्रेरी में {{code|2=C++|1=template<typename T> std::optional<T> }} परिभाषित किया गया है।
{{Further|Agda (programming language)}}
Agda में, विकल्प प्रकार का नाम दिया गया है {{code|2=agda|Maybe}} वेरिएंट के साथ {{code|2=agda|nothing}} और {{code|2=agda|just a}}.


=== सी ++ ===
=== सीओक्यू (COQ) ===
सी ++ 17 के बाद से, विकल्प प्रकार को मानक पुस्तकालय में परिभाषित किया गया है {{code|2=C++|1=template<typename T> std::optional<T> }}.
{{Further|सीओक्यू}}


=== कोक ===
सीओक्यू (Coq) में ऑप्शन टाइप को इस रूप में {{code|2=coq|1=Inductive option (A:Type) : Type := {{!}} Some : A -> option A {{!}} None : option A. }} परिभाषित किया गया है।
{{Expand section|with=example usage|date=July 2022}}
{{Further|Coq}}
Coq में, विकल्प प्रकार को इस रूप में परिभाषित किया गया है {{code|2=coq|1=Inductive option (A:Type) : Type := {{!}} Some : A -> option A {{!}} None : option A. }}.


=== एल्म ===
=== एल्म (ELM) ===
{{Expand section|with=example usage|date=July 2022}}
{{Further|एल्म (प्रोग्रामिंग भाषा)}}
{{Further|Elm (programming language)}}
एल्म में ऑप्शन टाइप को इस रूप में {{code|2=elm|1=type Maybe a = Just a {{!}} Nothing}}परिभाषित किया गया है।<ref>{{cite web |title=Maybe · An Introduction to Elm |url=https://guide.elm-lang.org/error_handling/maybe.html |website=guide.elm-lang.org}}</ref>
एल्म में, विकल्प प्रकार को इस रूप में परिभाषित किया गया है {{code|2=elm|1=type Maybe a = Just a {{!}} Nothing}}.<ref>{{cite web |title=Maybe · An Introduction to Elm |url=https://guide.elm-lang.org/error_handling/maybe.html |website=guide.elm-lang.org}}</ref>


=== एफ (F)  ===
{{Further|F तीव्र (प्रोग्रामिंग भाषा)}}


=== एफ # ===
  let showValue =
{{Expand section|with=the definition|date=July 2022}}
{{Further|F Sharp (programming language)}}
<वाक्यविन्यास लैंग = fsharp>
शोवैल्यू = चलो
    Option.fold (fun _ x -> sprintf वैल्यू है: %d x) कोई वैल्यू नहीं


चलो पूरा = कुछ 42
    Option.fold (fun _ x -> sprintf "The value is: %d" x) "No value"
खाली होने दो = कोई नहीं
let full = Some 42
let empty = None
showValue full |> printfn "showValue full -> %s"
showValue empty |> printfn "showValue empty -> %s"


शोवैल्यू फुल |> प्रिंटफन शोवैल्यू फुल -> %s
showValue full -> The value is: 42
शोवैल्यू खाली |> प्रिंटफन शोवैल्यू खाली -> %s
showValue empty -> No value
</वाक्यविन्यास हाइलाइट>
 
<वाक्यविन्यास प्रकाश लैंग = आउटपुट>
शोवैल्यू पूर्ण -> मान है: 42
शोवैल्यू खाली -> कोई मूल्य नहीं
</वाक्यविन्यास हाइलाइट>


=== हास्केल ===
=== हास्केल ===
{{Further|Haskell (programming language)}}
{{Further|
हास्केल में, विकल्प प्रकार को इस रूप में परिभाषित किया गया है {{code|2=haskell|1=data Maybe a = Nothing {{!}} Just a}}.<ref>{{Cite web |title=6 Predefined Types and Classes |url=https://www.haskell.org/onlinereport/haskell2010/haskellch6.html#x13-1250006.1.8 |access-date=2022-06-15 |website=www.haskell.org}}</ref>
हास्केल (प्रोग्रामिंग भाषा)}}
<वाक्यविन्यास लैंग = हैकेल>
हास्केल में ऑप्शन टाइप को इस रूप में {{code|2=haskell|1=data Maybe a = Nothing {{!}} Just a}}परिभाषित किया गया है। <ref>{{Cite web |title=6 Predefined Types and Classes |url=https://www.haskell.org/onlinereport/haskell2010/haskellch6.html#x13-1250006.1.8 |access-date=2022-06-15 |website=www.haskell.org}}</ref>  
शोवैल्यू :: शायद इंट -> स्ट्रिंग
showValue = foldl (\_ x -> मान है: ++ शो x) कोई मान नहीं
 
मुख्य :: आईओ ()
मुख्य = करना
    चलो पूरा = सिर्फ 42
    खाली होना = कुछ नहीं
 
    putStrLn $ शोवैल्यू फुल -> ++ शोवैल्यू फुल
    putStrLn $ शोवैल्यू खाली -> ++ शोवैल्यू खाली
</वाक्यविन्यास हाइलाइट>
 
<वाक्यविन्यास प्रकाश लैंग = आउटपुट>
शोवैल्यू पूर्ण -> मान है: 42
शोवैल्यू खाली -> कोई मूल्य नहीं
</वाक्यविन्यास हाइलाइट>


=== इदरीस ===
=== इदरीस ===
{{Further|Idris (programming language)}}
{{Further|इदरीस (प्रोग्रामिंग भाषा)}}
इदरीस में, विकल्प प्रकार को इस रूप में परिभाषित किया गया है {{code|2=idris|1=data Maybe a = Nothing {{!}} Just a}}.
इदरीस में, ऑप्शन टाइप को इस रूप में {{code|2=idris|1=data Maybe a = Nothing {{!}} Just a}}परिभाषित किया गया है। .
 
<वाक्यविन्यास लैंग = इदरिस>
शोवैल्यू: शायद इंट -> स्ट्रिंग
शोवैल्यू = फोल्डल (\_, x => वैल्यू है ++ शो एक्स) कोई वैल्यू नहीं
 
मुख्य : आईओ ()
मुख्य = करना
    चलो पूरा = सिर्फ 42
    खाली होना = कुछ नहीं
 
    putStrLn $ शोवैल्यू फुल -> ++ शोवैल्यू फुल
    putStrLn $ शोवैल्यू खाली -> ++ शोवैल्यू खाली
</वाक्यविन्यास हाइलाइट>


<वाक्यविन्यास प्रकाश लैंग = आउटपुट>
showValue:: Maybe Int -> String
शोवैल्यू पूर्ण -> मान है: 42
showValue = foldl (\_ x -> "The value is: " ++ show x) "No value"
शोवैल्यू खाली -> कोई मूल्य नहीं
</वाक्यविन्यास हाइलाइट>
main:: IO ()
main = do
    let full = Just 42
    let empty = Nothing
    putStrLn $ "showValue full -> " ++ showValue full
    putStrLn $ "showValue empty -> " ++ showValue empty


=== पहले ===
showValue full -> The value is: 42
{{Expand section|with=the definition|date=July 2022}}
{{Further|Nim (programming language)}}
<वाक्यविन्यास लैंग = निम>
आयात एसटीडी/विकल्प


प्रो शो वैल्यू (ऑप्ट: विकल्प [int]): स्ट्रिंग =
showValue empty -> No value   
  ऑप्ट.मैप (प्रोक (x: int): स्ट्रिंग = मान है: और $x).get (कोई मान नहीं)


होने देना
=== एनआईएम (NIM) ===
  पूर्ण = कुछ(42)
{{Further|एनआईएम (प्रोग्रामिंग भाषा)}}
  खाली = कोई नहीं (इंट)
iimport std/options


इको शोवैल्यू (पूर्ण) ->, शोवैल्यू (पूर्ण)
proc showValue(opt: Option[int]): string =
इको शोवैल्यू (खाली) ->, शोवैल्यू (खाली)
  opt.map(proc (x: int): string = "The value is: " & $x).get("No value")
</वाक्यविन्यास हाइलाइट>
let
  full = some(42)
  empty = none(int)
echo "showValue(full) -> ", showValue(full)
echo "showValue(empty) -> ", showValue(empty)


<वाक्यविन्यास प्रकाश लैंग = आउटपुट>
showValue(full) -> The Value is: 42
शोवैल्यू (पूर्ण) -> मान है: 42
showValue(empty) -> No value
शोवैल्यू (खाली) -> कोई मूल्य नहीं
</वाक्यविन्यास हाइलाइट>


=== ओकैमल ===
=== ओकैमल ===
{{Further|OCaml}}
{{Further|ओकैमल (OCaml)}}
OCaml में, विकल्प प्रकार को इस रूप में परिभाषित किया गया है {{code|2=ocaml|1=type 'a option = None {{!}} Some of 'a}}.<ref>{{Cite web |title=OCaml library : Option |url=https://v2.ocaml.org/releases/4.13/api/Option.html#TYPEt |access-date=2022-06-15 |website=v2.ocaml.org}}</ref>
<वाक्यविन्यास प्रकाश लैंग = ओकैमल>
शो_वैल्यू = चलो
  Option.fold ~none: no value ~some:(fun x -> value is: ^ string_of_int x)


चलो () =
ओकैमल (OCaml) में ऑप्शन टाइप को इस रूप में {{code|2=ocaml|1=type 'a option = None {{!}} Some of 'a}}परिभाषित किया गया है। <ref>{{Cite web |title=OCaml library : Option |url=https://v2.ocaml.org/releases/4.13/api/Option.html#TYPEt |access-date=2022-06-15 |website=v2.ocaml.org}}</ref>
  चलो पूरा = कुछ 42 इंच
  खाली होने दो = कोई अंदर नहीं


  Print_endline (शो_वैल्यू फुल -> ^ शो_वैल्यू फुल);
llet show_value =
  print_endline (शो_वैल्यू खाली -> ^ शो_वैल्यू खाली)
</वाक्यविन्यास हाइलाइट>


<वाक्यविन्यास प्रकाश लैंग = आउटपुट>
  Option.fold ~none:"No value" ~some:(fun x -> "The value is: " ^ string_of_int x)
शो_वैल्यू फुल -> वैल्यू है: 42
show_value खाली -> कोई मान नहीं
let () =
</वाक्यविन्यास हाइलाइट>
  let full = Some 42 in
  let empty = None in
  print_endline ("show_value full -> " ^ show_value full);
  print_endline ("show_value empty -> " ^ show_value empty)


=== जंग ===
  show_value full -> The value is: 42
{{Further|Rust (programming language)}}
जंग में, विकल्प प्रकार के रूप में परिभाषित किया गया है {{code|2=rust|enum Option<T> { None, Some(T) } }}.<ref>{{cite web |url=https://doc.rust-lang.org/core/option/enum.Option.html |title=Option in core::option - Rust |date=2022-05-18 |access-date=2022-06-15 |website=doc.rust-lang.org}}</ref>
<वाक्यविन्यास प्रकाश लैंग = जंग>
एफएन शो_वैल्यू (ऑप्ट: विकल्प <i32>) -> स्ट्रिंग {
    opt.map_or( कोई मान नहीं .to_ownership(), |x| प्रारूप! (मान है: {} , x))
}


एफएन मुख्य () {
show_value empty -> No value
    पूर्ण होने दें = कुछ (42);
    खाली होने दें = कोई नहीं;


    println! (शो_वैल्यू (पूर्ण) -> {}, शो_वैल्यू (पूर्ण));
=== रस्ट ===
    println! (शो_वैल्यू (खाली) -> {}, शो_वैल्यू (खाली));
{{Further|रस्ट (प्रोग्रामिंग भाषा)}}
}
</वाक्यविन्यास हाइलाइट>


<वाक्यविन्यास प्रकाश लैंग = आउटपुट>
रस्ट में, ऑप्शन टाइप के रूप में {{code|2=rust|enum Option<T> { None, Some(T) } }}परिभाषित किया गया है। <ref>{{cite web |url=https://doc.rust-lang.org/core/option/enum.Option.html |title=Option in core::option - Rust |date=2022-05-18 |access-date=2022-06-15 |website=doc.rust-lang.org}}</ref>
शो_वैल्यू (पूर्ण) -> मान है: 42
  fn show_value(opt: Option<i32>) -> String {
show_value(खाली) -> कोई मान नहीं
</वाक्यविन्यास हाइलाइट>


=== स्कैला ===
    opt.map_or("No value".to_owned(), |x| format!("The value is: {}", x))
{{Further|Scala (programming language)}}
}
स्काला में, विकल्प प्रकार को इस रूप में परिभाषित किया गया है {{code|2=scala|1=sealed abstract class Option[+A]}}, द्वारा विस्तारित एक प्रकार {{code|2=scala|1=final case class Some[+A](value: A)}} और {{code|2=scala|1=case object None}}.
fn main() {
    let full = Some(42);
    let empty = None;
    println!("show_value(full) -> {}", show_value(full));
    println!("show_value(empty) -> {}", show_value(empty));
}


<वाक्यविन्यास प्रकाश लैंग = स्कैला>
show_value(full) -> The value is: 42
वस्तु मुख्य {
show_value(empty) -> No value
  def शोवैल्यू (ऑप्ट: विकल्प [इंट]): स्ट्रिंग =
    ऑप्ट.फोल्ड (कोई मान नहीं )(x => s मान है: $x )


  def मुख्य (तर्क: ऐरे [स्ट्रिंग]): यूनिट = {
=== स्काला ===
    वैल पूर्ण = कुछ (42)
{{Further|स्काला (प्रोग्रामिंग भाषा)}}
    वैल खाली = कोई नहीं
स्काला में, ऑप्शन टाइप को इस रूप में  {{code|2=scala|1=sealed abstract class Option[+A]}}, द्वारा विस्तारित टाइप {{code|2=scala|1=final case class Some[+A](value: A)}} एवं {{code|2=scala|1=case object None}}परिभाषित किया गया है।


     println(s showValue(full) -> ${showValue(full)} )
object Main {
    println(s showValue(empty) -> ${showValue(empty)} )
  def showValue(opt: Option[Int]): String =
  }
  opt.fold("No value")(x => s"The value is: $x")
}
     def main(args: Array[String]): Unit = {val full = Some(42)
</वाक्यविन्यास हाइलाइट>
    val empty = None
    println(s"showValue(full) -> ${showValue(full)}")
    println(s"showValue(empty) -> ${showValue(empty)}")
  }
}


<वाक्यविन्यास प्रकाश लैंग = आउटपुट>
showValue(full) -> The value is: 42
शोवैल्यू (पूर्ण) -> मान है: 42
showValue(empty) -> No value
शोवैल्यू (खाली) -> कोई मूल्य नहीं
</वाक्यविन्यास हाइलाइट>


=== मानक एमएल ===
=== मानक एमएल ===
{{Expand section|with=example usage|date=July 2022}}
{{Further|
{{Further|Standard ML}}
मानक एमएल (ML)}}
मानक एमएल में, विकल्प प्रकार को इस रूप में परिभाषित किया गया है {{code|2=sml|1=datatype 'a option = NONE {{!}} SOME of 'a}}.
मानक एमएल में, ऑप्शन टाइप को इस रूप में {{code|2=sml|1=datatype 'a option = NONE {{!}} SOME of 'a}} परिभाषित किया गया है।  .


=== स्विफ्ट ===
=== स्विफ्ट ===
{{Further|Swift (programming language)}}
{{Further|स्विफ्ट (प्रोग्रामिंग भाषा)}}
स्विफ्ट में, विकल्प प्रकार को इस रूप में परिभाषित किया गया है {{code|2=swift|enum Optional<T> { case none, some(T) } }} लेकिन आम तौर पर लिखा जाता है {{code|2=swift|T?}}.<ref>{{cite web|title=Apple Developer Documentation|url=https://developer.apple.com/documentation/swift/optional|access-date=2020-09-06|website=developer.apple.com}}</ref>
स्विफ्ट में, ऑप्शन टाइप को इस रूप में {{code|2=swift|enum Optional<T> { case none, some(T) } }}परिभाषित किया गया है किन्तु इसे सामान्यतः {{code|2=swift|T?}} लिखा जाता है। <ref>{{cite web|title=Apple Developer Documentation|url=https://developer.apple.com/documentation/swift/optional|access-date=2020-09-06|website=developer.apple.com}}</ref>
<वाक्यविन्यास प्रकाश लैंग = तेज>
    func showValue(_ opt: Int?) -> String {
func शोवैल्यू (_ ऑप्ट: इंट?) -> स्ट्रिंग {
    रिटर्न ऑप्ट.मैप { वैल्यू है: \($0) } ?? मूल्य नहीं
}
 
पूर्ण होने दें = 42
खाली होने दें: इंट? = शून्य


प्रिंट (शोवैल्यू (पूर्ण) -> \ (शोवैल्यू (पूर्ण)))
    return opt.map { "The value is: \($0)" }?? "No value"
प्रिंट (शोवैल्यू (खाली) -> \ (शोवैल्यू (खाली)))
}
</वाक्यविन्यास हाइलाइट>
let full = 42
let empty: Int? = nil
print("showValue(full) -> \(showValue(full))")
print("showValue(empty) -> \(showValue(empty))")


<वाक्यविन्यास प्रकाश लैंग = आउटपुट>
showValue(full) -> The value is: 42
शोवैल्यू (पूर्ण) -> मान है: 42
showValue(empty) -> No value
शोवैल्यू (खाली) -> कोई मूल्य नहीं
</वाक्यविन्यास हाइलाइट>


=== ज़िग ===
=== ज़िग ===
{{Further|Zig (programming language)}}
{{Further|ज़िग (प्रोग्रामिंग भाषा)}}
ज़िग में, जोड़ें ? प्रकार के नाम से पहले like <code>?32</code> इसे वैकल्पिक प्रकार बनाने के लिए।


पेलोड <var>n</var> को if या while स्टेटमेंट में कैप्चर किया जा सकता है, जैसे {{code|2=zig|if (opt) {{!}}n{{!}} { ... } else { ... } }}, और यदि यह है तो एक और खंड का मूल्यांकन किया जाता है <code>null</code>.
ज़िग में, जोड़ें, ? टाइप के नाम से पूर्व<code>?32</code> इसे वैकल्पिक टाइप बनाने के लिए।


<वाक्यविन्यास प्रकाश लैंग = ज़िग>
पेलोड <var>n</var> को यद्यपि (if) या जबकि (while) स्टेटमेंट में कैप्चर किया जा सकता है, जैसे {{code|2=zig|if (opt) {{!}}n{{!}} { ... } else { ... } }}, एवं यदि यह है तो खंड का मूल्यांकन किया जाता हैI<code>null.</code>
const एसटीडी = @import (एसटीडी);
  const std = @import("std");


fn शोवैल्यू (आवंटक: std.mem.Allocator, ऑप्ट:? i32) ![]u8 {
fn showValue(allocator: std.mem.Allocator, opt: ?i32) ![]u8 {
    वापसी अगर (ऑप्ट) | एन |
    return if (opt) |n|
        std.fmt.allocPrint(आवंटक, मान है: {} , .{n})
        std.fmt.allocPrint(allocator, "The value is: {}", .{n})
    अन्य
    else
        std.fmt.allocPrint (आवंटक, कोई मूल्य नहीं, {});
        std.fmt.allocPrint(allocator, "No value", .{});
}
}
pub fn main() !void {
    // Set up an allocator, and warn if we forget to free any memory.
    var gpa = std.heap.GeneralPurposeAllocator(.{}){};
    defer std.debug.assert(!gpa.deinit());
    const allocator = gpa.allocator();
    // Prepare the standard output stream.
    const stdout = std.io.getStdOut().writer();
    // Perform our example.
    const full = 42;
    const empty = null;
    const full_msg = try showValue(allocator, full);
    defer allocator.free(full_msg);
    try stdout.print("showValue(allocator, full) -> {s}\n", .{full_msg});
    const empty_msg = try showValue(allocator, empty);
    defer allocator.free(empty_msg);
    try stdout.print("showValue(allocator, empty) -> {s}\n", .{empty_msg});
}


पब एफएन मुख्य ()! शून्य {
showValue(allocator, full) -> The value is: 42
    // एक आवंटक सेट करें, और चेतावनी दें कि क्या हम किसी स्मृति को मुक्त करना भूल जाते हैं।
showValue(allocator, empty) -> No value
    var gpa = std.heap.GeneralPurposeAllocator (। {}) {};
    defer std.debug.assert(!gpa.deinit());
    कॉन्स्ट एलोकेटर = gpa.allocator ();
 
    // मानक आउटपुट स्ट्रीम तैयार करें।
    const stdout = std.io.getStdOut().लेखक ();
 
    // हमारे उदाहरण का प्रदर्शन करें।
    स्थिरांक पूर्ण = 42;
    स्थिरांक खाली = अशक्त;
 
    const full_msg = शोवैल्यू (आवंटक, पूर्ण) का प्रयास करें;
    डिफर एलोकेटर.फ्री (फुल_एमएसजी);
    कोशिश करें stdout.print(showValue(allocator, full) -> {s}\n , .{full_msg});
 
    const empty_msg = शोवैल्यू (आवंटक, खाली) का प्रयास करें;
    डिफर एलोकेटर.फ्री (खाली_एमएसजी);
    प्रयास करें stdout.print(showValue(allocator, empty) -> {s}\n, .{empty_msg});
}
</वाक्यविन्यास हाइलाइट>
 
<वाक्यविन्यास प्रकाश लैंग = आउटपुट>
शोवैल्यू (आवंटक, पूर्ण) -> मान है: 42
शोवैल्यू (आवंटक, खाली) -> कोई मूल्य नहीं
</वाक्यविन्यास हाइलाइट>


== यह भी देखें ==
== यह भी देखें ==
* [[परिणाम प्रकार]]
* [[परिणाम प्रकार|परिणाम टाइप]]
* टैग की गई यूनियन
* टैग की गई यूनियन
* अशक्त प्रकार
* अदृढ़ टाइप
* [[अशक्त वस्तु पैटर्न]]
* [[अशक्त वस्तु पैटर्न|अदृढ़ वस्तु पैटर्न]]
* [[एक्सेप्शन हेंडलिंग]]
* [[एक्सेप्शन हेंडलिंग]]
* [[पैटर्न मिलान]]
* [[पैटर्न मिलान]]
Line 293: Line 223:
{{Reflist}}
{{Reflist}}


{{Data types}}
[[Category:Articles with hatnote templates targeting a nonexistent page]]
[[Category: कार्यात्मक प्रोग्रामिंग]] [[Category: डेटा के प्रकार]] [[Category: प्रकार सिद्धांत]]
[[Category:CS1 English-language sources (en)]]
 
[[Category:Collapse templates]]
 
 
[[Category: Machine Translated Page]]
[[Category:Created On 19/02/2023]]
[[Category:Created On 19/02/2023]]
[[Category:Lua-based templates]]
[[Category:Machine Translated Page]]
[[Category:Navigational boxes| ]]
[[Category:Navigational boxes without horizontal lists]]
[[Category:Pages with script errors]]
[[Category:Short description with empty Wikidata description]]
[[Category:Sidebars with styles needing conversion]]
[[Category:Template documentation pages|Documentation/doc]]
[[Category:Templates Vigyan Ready]]
[[Category:Templates that add a tracking category]]
[[Category:Templates that generate short descriptions]]
[[Category:Templates using TemplateData]]

Latest revision as of 15:46, 27 October 2023

प्रोग्रामिंग भाषाओं (विशेष रूप से कार्यात्मक प्रोग्रामिंग भाषाओं) एवं टाइप सिद्धांत में, ऑप्शन टाइप या संभवतः टाइप पैरामीट्रिक बहुरूपता है जो किसी वैकल्पिक मूल्य के एनकैप्सुलेशन का प्रतिनिधित्व करता है; उदाहरण के लिए, इसका उपयोग रिटर्न टाइप के कार्यों के रूप में किया जाता है जो प्रारम्भ होने पर सार्थक मूल्य वापस कर सकते हैं या नहीं। इसमें कंस्ट्रक्टर होता है जो या तो रिक्त होता है (प्रायः नामित None या Nothing), जो मूल डेटा Aको Just A या Some Aके टाइप में समाहित करता है I

कार्यात्मक प्रोग्रामिंग के बाहर विशिष्ट, किन्तु संबंधित अवधारणा, जो वस्तु-उन्मुख प्रोग्रामिंग में लोकप्रिय है, को अदृढ़ टाइप कहा जाता है (प्रायः व्यक्त किया जाता हैI) A ऑप्शन टाइप एवं अदृढ़ टाइप के मध्य मुख्य अंतर यह है कि ऑप्शन टाइप नेस्टिंग का समर्थन करता है (उदा Maybe (Maybe String)Maybe String), जबकि अदृढ़ टाइप नहीं करता है (उदा- String?? = String?) I

सैद्धांतिक दृष्टिकोण

टाइप सिद्धांत में, इसे इस टाइप लिखा जा सकता है: यह इस तथ्य को व्यक्त करता है कि मूल्यों के दिए गए समूह के लिए , किसी ऑप्शन टाइप के लिए मान्य, मानों के समूह में अतिरिक्त मान (रिक्त मान) जोड़ता है यह प्रोग्रामिंग में इस तथ्य से प्रमाणित होता है कि टैग की गई यूनियन वाली भाषाओं में, ऑप्शन टाइपों को इनकैप्सुलेटेड टाइप के टैग किए गए, संघ एवं इकाई टाइप के रूप में व्यक्त किया जा सकता है।[1] करी-हावर्ड पत्राचार में, ऑप्शन टाइप ∨: x∨1=1 के अवशोषण नियम से संबंधित हैं। ऑप्शन टाइप को संग्रह (सार डेटा टाइप) के रूप में भी देखा जा सकता है जिसमें शून्य तत्व होते हैं। ऑप्शन टाइप भी परिव्राजक है जहाँ:[2]

return = Just -- Wraps the value into a maybe

Nothing  >>= f = Nothing -- Fails if the previous monad fails
(Just x) >>= f = f x     -- Succeeds when both monads succeed  

ऑप्शन टाइप की मोनैडिक प्रकृति कुशलतापूर्वक विफलता एवं त्रुटियों को ट्रैक करने के लिए उपयोगी होती है।[3]


उदाहरण

एजीडीए (AGDA) 

एजीडीए (Agda) में ऑप्शन टाइप का नाम दिया गया है Maybe वेरिएंट के साथ nothing एवं just a वेरिएंट है।

C ++

सी++ 17 के पश्चात से, ऑप्शन टाइप को मानक लाइब्रेरी में template<typename T> std::optional<T> परिभाषित किया गया है।

सीओक्यू (COQ)

सीओक्यू (Coq) में ऑप्शन टाइप को इस रूप में Inductive option (A:Type) : Type := | Some : A -> option A | None : option A. परिभाषित किया गया है।

एल्म (ELM)

एल्म में ऑप्शन टाइप को इस रूप में type Maybe a = Just a | Nothingपरिभाषित किया गया है।[4]

एफ (F)

  let showValue =
    Option.fold (fun _ x -> sprintf "The value is: %d" x) "No value"

let full = Some 42
let empty = None

showValue full |> printfn "showValue full -> %s"
showValue empty |> printfn "showValue empty -> %s"
showValue full -> The value is: 42
showValue empty -> No value

हास्केल

हास्केल में ऑप्शन टाइप को इस रूप में data Maybe a = Nothing | Just aपरिभाषित किया गया है। [5]

इदरीस

इदरीस में, ऑप्शन टाइप को इस रूप में data Maybe a = Nothing | Just aपरिभाषित किया गया है। .

showValue:: Maybe Int -> String
showValue = foldl (\_ x -> "The value is: " ++ show x) "No value"

main:: IO ()
main = do
    let full = Just 42
    let empty = Nothing

    putStrLn $ "showValue full -> " ++ showValue full
    putStrLn $ "showValue empty -> " ++ showValue empty
showValue full -> The value is: 42
showValue empty -> No value     

एनआईएम (NIM)

iimport std/options
proc showValue(opt: Option[int]): string =
  opt.map(proc (x: int): string = "The value is: " & $x).get("No value")

let
  full = some(42)
  empty = none(int)

echo "showValue(full) -> ", showValue(full)
echo "showValue(empty) -> ", showValue(empty)
showValue(full) -> The Value is: 42
showValue(empty) -> No value

ओकैमल

ओकैमल (OCaml) में ऑप्शन टाइप को इस रूप में type 'a option = None | Some of 'aपरिभाषित किया गया है। [6]

llet show_value =
  Option.fold ~none:"No value" ~some:(fun x -> "The value is: " ^ string_of_int x)

let () =
  let full = Some 42 in
  let empty = None in

  print_endline ("show_value full -> " ^ show_value full);
  print_endline ("show_value empty -> " ^ show_value empty)
  show_value full -> The value is: 42
show_value empty -> No value

रस्ट

रस्ट में, ऑप्शन टाइप के रूप में enum Option<T> { None, Some(T) }परिभाषित किया गया है। [7]

 fn show_value(opt: Option<i32>) -> String {
    opt.map_or("No value".to_owned(), |x| format!("The value is: {}", x))
}

fn main() {
    let full = Some(42);
    let empty = None;

    println!("show_value(full) -> {}", show_value(full));
    println!("show_value(empty) -> {}", show_value(empty));
}
show_value(full) -> The value is: 42
show_value(empty) -> No value

स्काला

स्काला में, ऑप्शन टाइप को इस रूप में sealed abstract class Option[+A], द्वारा विस्तारित टाइप final case class Some[+A](value: A) एवं case object Noneपरिभाषित किया गया है।

object Main {
  def showValue(opt: Option[Int]): String =
 opt.fold("No value")(x => s"The value is: $x")
   def main(args: Array[String]): Unit = {val full = Some(42)
    val empty = None

    println(s"showValue(full) -> ${showValue(full)}")
    println(s"showValue(empty) -> ${showValue(empty)}")
  }
}
showValue(full) -> The value is: 42
showValue(empty) -> No value

मानक एमएल

मानक एमएल में, ऑप्शन टाइप को इस रूप में datatype 'a option = NONE | SOME of 'a परिभाषित किया गया है। .

स्विफ्ट

स्विफ्ट में, ऑप्शन टाइप को इस रूप में enum Optional<T> { case none, some(T) }परिभाषित किया गया है किन्तु इसे सामान्यतः T? लिखा जाता है। [8]

   func showValue(_ opt: Int?) -> String {
    return opt.map { "The value is: \($0)" }?? "No value"
}

let full = 42
let empty: Int? = nil

print("showValue(full) -> \(showValue(full))")
print("showValue(empty) -> \(showValue(empty))")
showValue(full) -> The value is: 42
showValue(empty) -> No value

ज़िग

ज़िग में, जोड़ें, ? टाइप के नाम से पूर्व?32 इसे वैकल्पिक टाइप बनाने के लिए।

पेलोड n को यद्यपि (if) या जबकि (while) स्टेटमेंट में कैप्चर किया जा सकता है, जैसे if (opt) |n| { ... } else { ... }, एवं यदि यह है तो खंड का मूल्यांकन किया जाता हैInull.

 const std = @import("std");
fn showValue(allocator: std.mem.Allocator, opt: ?i32) ![]u8 {
    return if (opt) |n|
        std.fmt.allocPrint(allocator, "The value is: {}", .{n})
    else
        std.fmt.allocPrint(allocator, "No value", .{});
}

pub fn main() !void {
    // Set up an allocator, and warn if we forget to free any memory.
    var gpa = std.heap.GeneralPurposeAllocator(.{}){};
    defer std.debug.assert(!gpa.deinit());
    const allocator = gpa.allocator();

    // Prepare the standard output stream.
    const stdout = std.io.getStdOut().writer();

    // Perform our example.
    const full = 42;
    const empty = null;

    const full_msg = try showValue(allocator, full);
    defer allocator.free(full_msg);
    try stdout.print("showValue(allocator, full) -> {s}\n", .{full_msg});

    const empty_msg = try showValue(allocator, empty);
    defer allocator.free(empty_msg);
    try stdout.print("showValue(allocator, empty) -> {s}\n", .{empty_msg});
}
showValue(allocator, full) -> The value is: 42 
showValue(allocator, empty) -> No value

यह भी देखें

संदर्भ

  1. Milewski, Bartosz (2015-01-13). "Simple Algebraic Data Types". Bartosz Milewski's Programming Cafe (in English). Sum types. "We could have encoded Maybe as: data Maybe a = Either () a". Archived from the original on 2019-08-18. Retrieved 2019-08-18.
  2. "A Fistful of Monads - Learn You a Haskell for Great Good!". www.learnyouahaskell.com. Retrieved 2019-08-18.
  3. Hutton, Graham (Nov 25, 2017). "What is a Monad?". Computerphile Youtube. Archived from the original on 2021-12-20. Retrieved Aug 18, 2019.
  4. "Maybe · An Introduction to Elm". guide.elm-lang.org.
  5. "6 Predefined Types and Classes". www.haskell.org. Retrieved 2022-06-15.
  6. "OCaml library : Option". v2.ocaml.org. Retrieved 2022-06-15.
  7. "Option in core::option - Rust". doc.rust-lang.org. 2022-05-18. Retrieved 2022-06-15.
  8. "Apple Developer Documentation". developer.apple.com. Retrieved 2020-09-06.