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