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