ハスケルの波乗り旅行パート1
9337 ワード
過去数日で、人々がこのプログラミング言語を賛美するのを見ている年の後、プログラムを書くことのその表現力または副作用のない「純粋な」機能的プログラミング言語であるその純粋さについてそれをしてください.
表現力
After playing Haskellと少しでも、プログラミング言語でどれだけこのような表現力が好きかを実感できました.
さらに、私は2010年からRubyでBackgoundプログラミングと2016年以降エリクサーを持っています.私はいつも私がこれらの言語で宣言的で読みやすいコードを書くことができる方法を愛していました.
それからハスケルに会った.
種類
2000年代後半、Javaでのキャリアプログラミングを始めました.したがって、私は、タイプ宣言とどのようにいくつかのレベルの正確さを確実にするためにタイプを使う方法について熟知しています.
しかし、ハスケルを学ぶとき、私はより多くのタイプについて学ぶことができることを理解することができました.10年以上を経てduck type programming , 私は、タイプをマスターするために「精神シフト」をしなければならないと感じます.
ありがたいことに、Haskellはタイプ推論に大きな仕事をしますhttps://en.wikipedia.org/wiki/Haskell_(programming_language) , これは、型の使用に関するプロセスを緩和します.
ハローワールド
このブログ記事シリーズでは、すでにあなたがいると仮定しますthe Haskell environment installed . あなたの時間とホストストレージの利用を保存する場合は、使用することができますDocker .
シンプルなハローワールドghc :
GHCとは
「グラスゴーHaskellコンパイラ」の略です.それはmost used Haskell compiler implementation , 初期のリリースを90年代初期に持つこと.
Haskellプログラムを書くとき
手動コンパイルプロセスのスキップ
我々の最初の記憶
クイックソートの例
シンプルで、最適化されていないQuicksortアルゴリズムを書きましょう.
Pattern Matching Recursion List comprehensions
REPLの使用
Haskellは、素晴らしいREPL 呼ばれるGHCi . GHCIインタプリタから、モジュールをロードし、そこから右側の関数を実行できます.
REPLを入力します.
序曲
REPLの中で、Haskellは自動的に基本をロードしますPrelude module などの標準ライブラリIO 複素数.そのため、プレリュードモジュールに属するすべての関数はrepl経由で使用可能です.
ライティングユニットテスト
テストは、技術やツールに不適切な工学的な実践です.Haskellは異なっており、コミュニティは、ユニットテストのための素晴らしいツールを作成しましたHUnit , Java JUnitに触発されます.
外部のパッケージなので、ダウンロードしてモジュールをインポートしなければなりません
私たちはStack Haskellでの複雑なプロジェクトの作成と管理のための良いツールが付属しています.
まず最初にインストールするようにスタックを設定しましょう
呼び出し the 同時に複数のテストケースを定義することもできます.
ラッピング
このポストでは、Haskellプログラミング言語への穏やかな導入を見ました.我々はまた、どのようにセットアップを書くと、すべての現実世界プロジェクトに非常に重要であるユニットテストを記述する方法をカバーした.
私はタイプ宣言をカバーしませんでした、しかし、それは将来のポストでカバーされます.
また、今後の投稿では、いくつかのソケットプログラミングを行い、HaskellでシンプルなTCPサーバーを作成します.
表現力
After playing Haskellと少しでも、プログラミング言語でどれだけこのような表現力が好きかを実感できました.
さらに、私は2010年からRubyでBackgoundプログラミングと2016年以降エリクサーを持っています.私はいつも私がこれらの言語で宣言的で読みやすいコードを書くことができる方法を愛していました.
それからハスケルに会った.
種類
2000年代後半、Javaでのキャリアプログラミングを始めました.したがって、私は、タイプ宣言とどのようにいくつかのレベルの正確さを確実にするためにタイプを使う方法について熟知しています.
しかし、ハスケルを学ぶとき、私はより多くのタイプについて学ぶことができることを理解することができました.10年以上を経てduck type programming , 私は、タイプをマスターするために「精神シフト」をしなければならないと感じます.
ありがたいことに、Haskellはタイプ推論に大きな仕事をしますhttps://en.wikipedia.org/wiki/Haskell_(programming_language) , これは、型の使用に関するプロセスを緩和します.
ハローワールド
このブログ記事シリーズでは、すでにあなたがいると仮定しますthe Haskell environment installed . あなたの時間とホストストレージの利用を保存する場合は、使用することができますDocker .
シンプルなハローワールドghc :
ghc -e 'putStrLn "Hello World in Haskell!"'
これはHaskellで最も簡単なハローワールドです.ghc
で-e
modeは式を解釈するputStrLn "Hello World in Haskell"
, ネイティブコードにコンパイルして実行します.GHCとは
「グラスゴーHaskellコンパイラ」の略です.それはmost used Haskell compiler implementation , 初期のリリースを90年代初期に持つこと.
Haskellプログラムを書くとき
.hs
ソースファイルghc
プログラムをネイティブコードにコンパイルするにはたとえば、「Hello World」を別の「Hello World」にしましょう.Hello.hs
main = putStrLn "Hello World in Haskell!"
次に、ghc
:ghc Hello.hs
出力ファイルにバイナリコードをコンパイルして生成します./Hello
, これは正常に実行できます../Hello
「Haskellでこんにちは世界!」ああ!🎉手動コンパイルプロセスのスキップ
我々の最初の記憶
Hello World
例:手動コンパイルプロセスをスキップするには?The -e
オプションは有効なHaskell式であるため、関数呼び出しはその対象となります.ghc app/Hello.hs -e main
呼び出しと同じです.ghc -e 'putStrLn "Hello World in Haskell!"'
クイックソートの例
シンプルで、最適化されていないQuicksortアルゴリズムを書きましょう.
Quicksort.hs
quicksort [] = []
quicksort [pivot] = [pivot]
quicksort (pivot:tail) =
(quicksort [smaller | smaller <- tail, smaller <= pivot])
++ [pivot] ++
(quicksort [larger | larger <- tail, larger > pivot])
さて、アルゴリズムを実行するには、次のようなことがあります.ghc Quicksort.hs -e "quicksort [5, 13, 8, 1, 2, 1, 3]"
# [1, 1, 2, 3, 5, 8, 13]
Quicksortソリューションを説明するのをスキップしますが、Haskellでは基本的に次のような機能を使用します.REPLの使用
Haskellは、素晴らしいREPL 呼ばれるGHCi . GHCIインタプリタから、モジュールをロードし、そこから右側の関数を実行できます.
REPLを入力します.
ghci
次に、REPLの内部でいくつかの数学を行います.ghci> 1 + 1
2
クイックソートモジュールをロードします.ghci> :load Quicksort.hs
[1 of 1] Compiling Main ( Quicksort.hs, interpreted )
Ok, one module loaded.
ghci> quicksort [2, 3, 1]
[1, 2, 3]
とREPLを終了します:ghci> :quit
序曲
REPLの中で、Haskellは自動的に基本をロードしますPrelude module などの標準ライブラリIO 複素数.そのため、プレリュードモジュールに属するすべての関数はrepl経由で使用可能です.
# implicit
ghci> putStrLn "hello from GHCi"
# explicit
ghci> Prelude.putStrLn "hello from GHCi"
ライティングユニットテスト
テストは、技術やツールに不適切な工学的な実践です.Haskellは異なっており、コミュニティは、ユニットテストのための素晴らしいツールを作成しましたHUnit , Java JUnitに触発されます.
外部のパッケージなので、ダウンロードしてモジュールをインポートしなければなりません
Test.HUnit
Haskellでの最初の単体テストを実行するには.私たちはStack Haskellでの複雑なプロジェクトの作成と管理のための良いツールが付属しています.
まず最初にインストールするようにスタックを設定しましょう
ghc
孤立した場所で、パッケージを使用するための有用なコマンドの束を与えます.stack setup
今、私たちはHUnit
パッケージstack install HUnit
次の単体テストTests.hs
import Test.HUnit
simpleTest = TestCase (assertEqual "1 equals 1" 1 1)
それから、テストを実行できます.stack ghc -- Tests.hs -e "runTestTT simpleTest"
これは以下のようになります:Cases: 1 Tried: 1 Errors: 0 Failures: 0
Counts {cases = 1, tried = 1, errors = 0, failures = 0}
注意:stack
が必要です.HUnit
モジュールをghc
Test.HUnit
モジュールは関数名を定義しますrunTestTT
テストを実行するために使用するimport Test.HUnit
simpleTest = TestCase (assertEqual "1 == 1" 1 1)
mathTest = TestCase (assertEqual "10 / 5 equals 2" (10 / 5) 2)
tests = TestList [
TestLabel "simple" simpleTest,
TestLabel "math" mathTest]
stack ghc -- Tests.hs -e "runTestTT tests"
また、もしあれば、テストケースごとに複数のアサーションを行います.import Test.HUnit
tests = TestCase $ do
assertEqual "1 == 1" 1 1
assertEqual "10 / 5 equals 2" (10 / 5) 2
ラッピング
このポストでは、Haskellプログラミング言語への穏やかな導入を見ました.我々はまた、どのようにセットアップを書くと、すべての現実世界プロジェクトに非常に重要であるユニットテストを記述する方法をカバーした.
私はタイプ宣言をカバーしませんでした、しかし、それは将来のポストでカバーされます.
また、今後の投稿では、いくつかのソケットプログラミングを行い、HaskellでシンプルなTCPサーバーを作成します.
Reference
この問題について(ハスケルの波乗り旅行パート1), 我々は、より多くの情報をここで見つけました https://dev.to/leandronsp/a-crud-journey-in-haskell-part-i-introduction-2c3jテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol