Haskell-input-and-output

提供:Dev Guides
移動先:案内検索

Haskell-入力および出力

これまでに説明したすべての例は、本質的に静的です。 この章では、ユーザーと動的に通信する方法を学びます。 Haskellで使用されるさまざまな入力および出力テクニックを学びます。

ファイルとストリーム

これまで、プログラム自体のすべての入力をハードコーディングしました。 静的変数から入力を取得しています。 次に、外部ファイルからの読み取りおよび書き込みの方法を学びましょう。

ファイルを作成して、「abc.txt」という名前を付けましょう。 次に、このテキストファイルに「Welcome to finddevguides。 ここでは、Haskellを学ぶのに最適なリソースを入手できます。」

次に、このファイルの内容をコンソールに表示する次のコードを記述します。 ここでは、EOF文字が見つかるまでファイルを読み取る関数readFile()を使用しています。

main = do
   let file = "abc.txt"
   contents <- readFile file
   putStrLn contents

上記のコードは、「abc.txt」というファイルを文字列として読み取り、ファイルの終わり文字が見つかるまで読み取ります。 このコードは次の出力を生成します。

Welcome to finddevguides
Here, you will get the best resource to learn Haskell.

端末で印刷しているものはすべて、そのファイルに書き込まれていることを確認します。

コマンドライン引数

Haskellは、コマンドプロンプトからファイルを操作する機能も提供します。 ターミナルに戻り、 "ghci" と入力しましょう。 次に、コマンドの次のセットを入力します-

let file = "abc.txt"
writeFile file "I am just experimenting here."
readFile file

ここでは、「abc.txt」というテキストファイルを作成しました。 次に、コマンド writeFile を使用して、ファイルにステートメントを挿入しました。 最後に、コマンド readFile を使用して、コンソールにファイルの内容を印刷しました。 私たちのコードは次の出力を生成します-

I am just experimenting here.

例外

  • 例外*はコードのバグとみなすことができます。 これは、コンパイラーが実行時に期待される出力を取得しない状況です。 他の優れたプログラミング言語と同様に、Haskellは例外処理を実装する方法を提供します。

Javaに精通している場合は、Try-Catchブロックを知っているかもしれません。通常はエラーをスローし、 catch ブロックで同じエラーをキャッチします。 Haskellには、ランタイムエラーをキャッチするための同じ関数もあります。

try の関数定義は、「try
Exception e ⇒ IO a→ IO(e e e a)」のようになります。 次のサンプルコードをご覧ください。 「ゼロ除算」例外をキャッチする方法を示しています。
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

上記の例では、 Control.Exception モジュールの組み込みの try 関数を使用しているため、事前に例外をキャッチしています。 上記のコードは、画面に以下の出力を生成します。

Caught exception: divide by zero