コンテンツにスキップ

HTTP Server

もう少し興味深いプログラムを見てみましょう。こちらは HTTP サーバーの例になります。

require "http/server"

server = HTTP::Server.new do |context|
  context.response.content_type = "text/plain"
  context.response.print "Hello world!The time is #{Time.local}"
end

address = server.bind_tcp 8080
puts "Listening on http://#{address}"
server.listen

上記のコードをすべて理解するためにはこの言語リファレンス全体を読む必要がありますが、ここでいくつかの点について説明しておきます。

  • requireで、他のファイルで定義されたコードを読み込むことができます

    require "http/server"
    
  • 型を指定することなくローカル変数を定義することができます

    server = HTTP::Server.new(...)
    
  • HTTP サーバーのポート番号は HTTP::Server オブジェクトの bind_tcp メソッドによってセットされます (ポート番号を 8080 にセット)

    address = server.bind_tcp 8080
    
  • オブジェクトに対してメソッドを実行 (またはメッセージを送信) することでプログラムを構築します

    HTTP::Server.new(...)
    # ...
    Time.local
    # ...
    address = server.bind_tcp 8080
    # ...
    puts "Listening on http://#{address}"
    # ...
    server.listen
    
  • ブロックを使うと簡単にコードを再利用することができ、また、関数型の世界にあるいくつかの機能を利用することが可能になります

    HTTP::Server.new do |context|
      # ...
    end
    
  • 文字列埋め込み (string interpolation) を使うと、簡単に文字列に式を埋め込むことができます。Crystalはその他にも多くのシンタックスがあります。例えば配列やハッシュ、そして範囲やタプルなどです

    "Hello world!The time is #{Time.local}"