読者です 読者をやめる 読者になる 読者になる

だらだらしてたいなぁ

ずっとゲームしながらだらだらしてたいけど、がんばってブログ書いてみた

Scalaの壁をぶち壊せ! "壁パン1発目" ~ 導入編

はじめに

バカ向け言語のエントリでscalaは簡単にコーディング出来ると書きました。それは事実なのですが、そこに行き着くために超えなくてはならない壁が、いくつか立ちはだかっています。
ぼくが分かり難かった部分を中心に、Scalaの壁をぶち壊して先に進むためのサポート的な何かを書いていこうと思います。ただ、scala入門では無さそうな予感がするので、初めての方は先にどこかでscala入門を読んでおいたほうが良いかもしれません。

実行環境

scalaの実行環境を構築するにはplay frameworkを突っ込むのが一番簡単です。

1. 落とせ!

Play Framework - Build Modern & Scalable Web Apps with Java and Scala
playframeworkをダウンロードしてください。

2. 通せ!

ダウンロードしたzipファイルを展開して、パスを通してください。

3. New!

"play new sb" を実行します。 アプリ名と言語を聞かれるので、scalaを選んでください。

使い方

scala console

"sb"フォルダが作成されるので移動し、コマンドラインから"play console"を実行してください。"scala> "のコマンドプロンプトが表示されます。ruby等の動的言語ではおなじみのREPLがJVM環境にやってきました。
scalaのコードをそのまま打ち込むことが出来、Tabキーでの補完やカーソルキーやCtl+Rを使って履歴参照も可能です。いろいろ試してみてください。

便利なコマンド

意外と知らないscala consoleの便利コマンドを紹介します。

:paste

consoleでは1行単位でしか入力出来ませんが、":paste"を使えば複数行をまとめて入力出来ます。では、試してみましょう。
1. 以下のコードをコピー

object MinamikeDSL {
  implicit class i2Chiaki(i:Int) {
    def2倍にする = s"それは${i * 2}だバカやろぅ"
  }
}

2. consoleで":paste"コマンドを実行*1
3. コピーしたコードをペースト
4. "Ctl + D"でpasteモードを終了
5. 実行

scala> import MinamikeDSL._
scala> (1 + 10) を2倍にする

はい、気持よく罵られましたね。これであなたは新たな道への第一歩を踏み出したのです。

:type

":type"コマンドは値の型(クラス)情報を参照出来ます。例えば"s"の場合Stringと表示されます。

scala> :type "s"
String

ここまでだと大した事ありませんが、これに"-v"オプションをくっつけると化けます。

scala> :type -v "s"
//一部省略
// Type signature
String
// Internal Type structure
    final class String extends Serializable with Comparable[String] with CharSequence

何という事でしょう、継承関係も表示されるようになりました。これで型が大体どんな機能を持っているのかを把握出来ますね。

:warnings

":paste"コマンドでコードをpasteした時になにやらwarningが表示されていました。

warning: there were 1 feature warnings; re-run with -feature for details

"-feature"オプションを付けてもう一回実行しろと言う事ですが面倒ですよね。そんな時に":warnings"です。

scala> "abc" tail
warning: there were 1 feature warnings; re-run with -feature for details
res6: String = bc
scala> :warnings
//一部略
<console>:12: warning: postfix operator tail should be enabled
by making the implicit value language.postfixOps visible.
This can be achieved by adding the import clause 'import scala.language.postfixOps'
              "abc" tail

再実行する事無く、warningが表示されました。

Scalaスケーラブルプログラミング第2版

Scalaスケーラブルプログラミング第2版


すごいHaskellたのしく学ぼう!

すごいHaskellたのしく学ぼう!

*1:過去の行いを無かったことにしたい場合は":reset"で記憶を消去