Haskell - Giriş ve Çıkış
Şimdiye kadar tartıştığımız tüm örnekler doğası gereği statiktir. Bu bölümde, kullanıcılarla dinamik olarak iletişim kurmayı öğreneceğiz. Haskell'de kullanılan farklı girdi ve çıktı tekniklerini öğreneceğiz.
Dosyalar ve Akışlar
Şimdiye kadar programın içindeki tüm girdileri sabit kodladık. Statik değişkenlerden girdi alıyoruz. Şimdi, harici bir dosyadan nasıl okuyup yazılacağını öğrenelim.
Bir dosya oluşturalım ve "abc.txt" olarak adlandıralım. Ardından, bu metin dosyasına şu satırları girin: "Tutorialspoint'e hoş geldiniz. Burada Haskell'i öğrenmek için en iyi kaynağı bulacaksınız."
Ardından, bu dosyanın içeriğini konsolda gösterecek aşağıdaki kodu yazacağız. Burada, bir EOF karakteri bulana kadar bir dosyayı okuyan readFile () işlevini kullanıyoruz.
main = do
let file = "abc.txt"
contents <- readFile file
putStrLn contents
Yukarıdaki kod parçası, "abc.txt" dosyasını herhangi bir Dosya Sonu karakteriyle karşılaşana kadar Dize olarak okuyacaktır. Bu kod parçası aşağıdaki çıktıyı üretecektir.
Welcome to Tutorialspoint
Here, you will get the best resource to learn Haskell.
Terminalde yazdırdığı her şeyin o dosyaya yazıldığını gözlemleyin.
Komut Satırı Değişkeni
Haskell ayrıca tesisin komut istemi aracılığıyla bir dosyayı çalıştırmasını sağlar. Terminalimize geri dönelim ve yazalım"ghci". Ardından, aşağıdaki komut setini yazın -
let file = "abc.txt"
writeFile file "I am just experimenting here."
readFile file
Burada "abc.txt" adlı bir metin dosyası oluşturduk. Ardından, komutunu kullanarak dosyaya bir ifade ekledik.writeFile. Son olarak komutunu kullandıkreadFileDosyanın içeriğini konsolda yazdırmak için. Kodumuz aşağıdaki çıktıyı üretecektir -
I am just experimenting here.
İstisnalar
Bir exceptionkodda bir hata olarak kabul edilebilir. Derleyicinin çalışma zamanında beklenen çıktıyı alamadığı bir durumdur. Diğer tüm iyi programlama dilleri gibi Haskell, istisna işlemeyi uygulamak için bir yol sağlar.
Java'ya aşina iseniz, o zaman genellikle bir hata attığımız ve aynısını şurada yakaladığımız Try-Catch bloğunu biliyor olabilirsiniz. catchblok. Haskell'de, çalışma zamanı hatalarını yakalamak için de aynı işleve sahibiz.
Fonksiyon tanımı try"try :: Exception e => IO a -> IO (Her iki ea)" gibi görünür. Aşağıdaki örnek koda bir göz atın. "Sıfıra Böl" istisnasını nasıl yakalayabileceğinizi gösterir.
import Control.Exception
main = do
result <- try (evaluate (5 `div` 0)) :: IO (Either SomeException Int)
case result of
Left ex -> putStrLn $ "Caught exception: " ++ show ex
Right val -> putStrLn $ "The answer was: " ++ show val
Yukarıdaki örnekte, dahili olarak kullandık try işlevi Control.Exceptionmodül, dolayısıyla istisnayı önceden yakalıyoruz. Yukarıdaki kod parçası ekranda aşağıdaki çıktıyı verecektir.
Caught exception: divide by zero