Elm - Hata İşleme

Hata, bir programdaki beklenmeyen herhangi bir durumdur. Derleme zamanında veya çalışma zamanında hatalar ortaya çıkabilir. Derleme zamanı hataları, bir programın derlenmesi sırasında meydana gelirken (Örneğin, programın sözdiziminde hata) programın yürütülmesi sırasında çalışma zamanı hataları meydana gelir. Diğer programlama dillerinden farklı olarak, Elm çalışma zamanı hataları atmaz.

Bir kullanıcının yaşını kabul eden bir uygulama düşünün. Yaş sıfır veya negatif ise uygulama hata vermelidir. Bu durumda Elm uygulaması, kullanıcı yaş olarak sıfır veya negatif bir değer girerse, çalışma zamanında açıkça bir hatayı ortaya çıkarmak için hata işleme kavramını kullanabilir. Hata işleme, programın yürütülmesi sırasında beklenmedik bir şey olursa yapılacak eylemi belirtir.

Elm programlama dili hataları aşağıdaki şekillerde ele alır -

  • MayBe
  • Result

Olabilir

Bir uygulamadaki arama özelliğini düşünün. Arama işlevi, arama anahtar sözcüğü başka bulunursa ilgili verileri döndürür, hiçbir şey döndürmez. Bu kullanım durumu, MayBe türü kullanılarak Elm'de uygulanabilir.

Sözdizimi

variable_name:MayBe data_type

MayBe türünde bir değişken aşağıdaki değerlerden birini içerebilir -

  • Just some_Value - Bu, geçerli veriler varsa kullanılır.

  • Hiçbir şey - Bu, değer yoksa veya bilinmiyorsa kullanılır. Diğer programlama dillerinde hiçbir şey null'a eşdeğer değildir.

İllüstrasyon

Aşağıdaki örnek, MayBe türünün değişkenler ve işlevle nasıl kullanılacağını gösterir.

Step 1 - Bir MayBeDemo.elm dosyasını açın ve aşağıdaki kodu ekleyin

-- MayBeDemo.elm
module MayBeDemo exposing(..)
import Maybe

--declaring a MayBe variable and assigning value to it
userName : Maybe String
userName = Just "Mohtashim"

--declaring a MayBe variable and assigning value to it
userAge :Maybe Int
userAge = Just 20

--declaring a MayBe variable and assigning value to it
userSalary:Maybe Float
userSalary = Nothing

--declaring a custom type
type Country = India | China | SriLanka

--defining a function that takes a String parameter as input and returns a value of type MayBe

getCountryFromString : String -> Maybe Country
getCountryFromString p =
case p of
   "India"
      -> Just India
   "China"
      -> Just China
   "SriLanka"
      -> Just SriLanka
   _
      -> Nothing

Step 2 - Modülü karaağaç repl olarak içe aktarın ve aşağıda verildiği gibi çalıştırın

E:\ElmWorks\ErroApp> elm repl
---- elm-repl 0.18.0 -----------------------------------------------------------
:help for help, :exit to exit, more at 
      
        -------------------------------------------------------------------------------- > import MayBeDemo exposing(..) > userName Just "Mohtashim" : Maybe.Maybe String > userAge Just 20 : Maybe.Maybe Int > userSalary Nothing : Maybe.Maybe Float > getCountryFromString "India" Just India : Maybe.Maybe MayBeDemo.Country > getCountryFromString "india" Nothing : Maybe.Maybe MayBeDemo.Country 
      

İşlev, işleve iletilen değerin Hindistan mı, Çin mi yoksa SriLanka mı olduğunu kontrol eder. Parametrenin değeri bunlardan hiçbiriyle eşleşmiyorsa, hiçbir şey döndürmez.

Sonuç

Uygulamanın bazı koşulları doğrulaması ve koşul yerine getirilmezse bir hata oluşturması gereken bir örnek düşünün. Sonuç türü bunu başarmak için kullanılabilir. Sonuç türü, uygulama açıkça bir hatayı ortaya çıkarmak ve neyin yanlış gittiğiyle ilgili ayrıntıları döndürmek istiyorsa kullanılmalıdır.

Sözdizimi

Sonuç türü bildirimi iki parametre alır - hatanın veri türü (genellikle String) ve her şey yolunda giderse döndürülecek sonucun veri türü.

type Result error_type data_value_type
= Ok data_value
| Err error_message

Sonuç türü aşağıdaki değerlerden birini döndürür -

  • Tamam some_value - Döndürülecek sonucu temsil eder

  • Err - Beklenen koşullar yerine getirilmezse döndürülecek hata mesajını temsil eder.

Resim 1

Elm REPL'de aşağıdaki örneği deneyin -

> String.toInt
<function> : String -> Result.Result String Int
-- successful result
> String.toInt "10"
Ok 10 : Result.Result String Int
-- unsuccessful result , Error
> String.toInt "a"
Err "could not convert string 'a' to an Int" : Result.Result String Int

String.toInt işlevi, iletilen parametre geçerliyse Tamsayı değerini döndürür. Parametre bir sayı değilse, işlev bir hata verir.

Resim 2

Aşağıdaki örnek, yaşı bir parametre olarak kabul eder. İşlev, 0 ile 135 arasındaysa yaşı döndürür, aksi takdirde uygun bir hata iletisi verir.

Step 1 - Bir ResultDemo.elm dosyası oluşturun ve buna aşağıdaki kodu ekleyin.

--ResultDemo.elm
module ResultDemo exposing(..)

userId : Result String Int
userId = Ok 10

emailId : Result String Int
emailId = Err "Not valid emailId"

isReasonableAge : String -> Result String Int
isReasonableAge input =
   case String.toInt input of
      Err r ->
         Err "That is not a age!"

   Ok age ->
      if age < 0 then
         Err "Please try again ,age can't be negative"
      else if age > 135 then
         Err "Please try agian,age can't be this big.."

   else
      Ok age

Step 2 - Modülü elm paketine içe aktarın ve aşağıda belirtildiği gibi çalıştırın

E:\ElmWorks\ElmRepo\15_ErrorHandling\15_Code> elm repl
---- elm-repl 0.18.0 -----------------------------------------------------------
:help for help, :exit to exit, more at <https://github.com/elm-lang/elm-repl>
--------------------------------------------------------------------------------
> import ResultDemo exposing (..)
> userId
Ok 10 : Result.Result String Int
> emailId
Err "Not valid emailId" : Result.Result String Int
> isReasonableAge "10"
Ok 10 : Result.Result String Int
> isReasonableAge "abc"
Err "That is not a age!" : Result.Result String Int