no_picture

Scala福岡2016に遊びにいって「Scalaで関数」というLTをした

Scala福岡2016に遊びにいきました。 会場はnulabさんのオフィスで、BacklogやCaccooというナイスなサービスを展開されています。 広島にもWebサービスをやってるナイスな会社が増えて欲しいなとおもいました。 僕はScalaあまり詳しくない初心者なので、最新のネタがズバズバ跳んでるScala Matsuriとはちょっと違って、Scalaやってるなら知っていたほうがよい基礎っぽい話がたくさん聞けて、とてもよかったです。(もちろんScala Matsuriも楽しい) せっかく広島からイベントに参加したので、ライトニングトークもしてきました。 特にネタをもってなかったので、Scalaの気になっている部分のtupledやcurriedというメソッドについて整理したので、その発表をしました。 基本形の関数から、カリー化された関数、タプル化された関数の3種類があることがわかって、カリー化された関数をタプル化された関数に変換するには、一旦基本形にしないといけないことがわかりました。 ショートカットするメソッドがどこかにあってもよさそうな気もしましたが、あったらあったでカオスになりそうな気もします。(スライドの34ページ目に記してます。) Haskellとの対応を考えると、Haskellには「カリー化された関数」と「タプル化された関数」しかないと考えることもできそうで、いろいろすっきりさせることができました。 県外のコミュニティのイベントにでかけると知らない人もたくさんいるし、新たな繋がりや新しい文化を仕入れることもできて、とても楽しいです。 ぜひ広島のイベントにも遊びに来て、いろんな風を入れて欲しいと思いました。

no_picture

内包表記とPythonと… - #LT駆動 21

LT駆動開発21でLTしてきました。 タイトル「内包表記とPythonと…Option」です。 PyCon Mini Hiroshima用に用意してたネタですが、参加できなかったので放出しました。 Pythonの内包表記でScalaのOptionのようなものをつくってみました。 Pythonの内包表記はScalaではfor式で表現ができます。 Scalaではリスト以外のものでもfor式が使えます。 代表格としてOptionが上げられます。 ということで、PythonにもOptionクラスをつくり内包表記で利用できるようにしてみました。 スライドに登場するように内包表記に対応するために、__iter__とnextメソッドを実装をしています。 class Option: def __init__(self, value): self.value = value def __iter__(self): return self def next(self): if self.value == None: raise StopIteration else: ret = self.value self.value = None return ret def __str__(self): if self.value == None: return "Nothing" else: return "Some(%d)" % self.value def add(x, y): return [ x_+ y_ for x_ in x for y_ in y ] add(Option(1),

no_picture

Scalaをはじめる α & β - #LT駆動 15

LT駆動開発15に参加してきました。 最近、Scalaを触っているので、仕事していると放置しがちな基本的な使い方を調べたりしています。 今回はα世界線とβ世界線の二本でお送りいたします。 αはsbtを使わずにJARを使う方法を調べました βはAppトレイトについて調べました なんのJARを使うのか非常に悩んだのですがScalazにしておきました。 Scalazを選ぶまでは早かったのですが、Scalazをつかった良いサンプルがつくれずに苦戦しました。 Appトレイトのほうは、Scala関西 Summit 2015のLTに応募しようかと一瞬思ったのですが、まだ2ヶ月あるので止めておきました。 まあ、一番苦戦したのは scala HogeZ -cp ‘*.jar:.’ とかいて、動かなかったことである。 まとめ1 JARを使うときは classpath を指定すればよい。 sbt使うと楽チン。 まとめ2 object Hoge { //コード def hoge() = //コード } みたいなのはJavaでいうと class Hoge { static { // コード } public staic void hoge() { /* コード */ } } みたいな感じになるらしい。 https://github.com/scala/scala/blob/540b18fb68a0210b187e595622c31f20b2c6f581/src/compiler/scala/tools/nsc/transform/Constructors.scala#L474 こういった特殊なものがあるならもっとしりたい 参考文献 はじめての関数型プログラミング教室 // Speaker Deck sbtで、プロジェクト内のライブラリ依存関係を調べる - CLOVER App - Scala Standard Library 2.11.6 DelayedInit - Scala

no_picture

scalaz に入門する

Scalaz をおすすめされた。 ひむひむはScalazでいいと思うの — 航空母艦 (@razon) August 23, 2013 とりあえず、入門してみよう。 scalaz って何 Scala がより関数型言語の力を得るらしい。よくわからん。 モナドとか使える。 https://github.com/scalaz/scalaz sbt を入れる sbt ってのを使っていれば…、て記述がたくさんある。 ruby でいうと bundler に近いものなのでしょうか。ちょっと違うけど。 makefile みたいなもんだろうか。これもちょっと違うよーな。 インストールですが、Gentoo Prefix で入れたい。 Gentoo なら Overlay がある。 https://github.com/whiter4bbit/overlays layman します。 layman -f --overlays https://github.com/whiter4bbit/overlays/raw/master/layman.xml --add gentoo-scala-tools 設定できたら、 emerge sbt-bin でいけた。 sbt をつかって scalaz プロジェクトフォルダを用意して build.sbt を作成する。 Hello, World - はじめる sbt を参考にした。 name := "scalaz-helloworld" version := "1.0" scalaVersion := "2.9.2" libraryDependencies += "org.scalaz"

no_picture

Scala 入門しとく

Scala はじめるはじめる詐欺をしていたので、はじめることにしました。 インストール Gentoo Prefix で emerge dev-lang/scala と、しましたが、ビルドに失敗しました。 ドキュメントまわりでエラーのようなのでちょっと工夫すればビルドできそうですが、諦めてバイナリインストールを試みました。 $EPREFIX/etc/partoge/pacakeg.use に以下を加えました。 =dev-lang/scala-2.9.2 binary はじめてみる Getting Started - Scala を参考にはじめてみました。 基本のハローワールドです。ようこそ Scala の世界へ。 scala コマンドで対話環境が起動できます。 $ scala そこに以下のコードを打ち込んでみました。 object HelloWorld { def main(args: Array[String]) { println("Hello, world!") } } 僕の Ruby 的な感覚では HelloWorld というオブジェクトを作り特異メソッド main を定義している感じに見えます。 このあたりは、Java のエントリポイントが static な main メソッドになるのを知っていれば、納得感はあります。 対話環境には defined module HelloWorld と表示されているのが気になります。 「オブジェクトは別にメソッドが集めるところが用意されてるのかな?」という印象を受けました。 その後、追加で、 HelloWorld.main(null) と入力しますと、Hello, World と出力されました。 Haskell を学習してる感覚からいくと 第1引数は null より空のリストを渡したいですね。 「null が渡せて気持ち悪い。」的な感じがしました。