Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

プログラミング言語Scalaの特徴として、オブジェクト指向と関数型の融合とか、オブジェクト指向と関数型のハイブリッドといったことがよく言われます。これらの言説は間違っているわけではないものの、Scalaという言語の本質的な部分をよく表していないと私は思います。 また、関数型の要素を取り込んだ、という部分によって必要以上にScalaを恐れている人もいるように見受けられます。 そこで、「正しい」Scala言語の解説を簡単に書いてみることにしました。 クラスベースのオブジェクト指向言語である object構文やその他一部を除いて、Scalaでは原則的にクラスからオブジェクトをnewしてオブジェクトを作成します。
scala> trait A { def greeting(name: String): String } defined trait A // これは普通 scala> val a1: A = new A { def greeting(name: String): String = "Hello, " + name } a1: A = $anon$1@5c0f79f0 scala> a1.greeting("Serval") res0: String = Hello, Serval // !!!?!?!?!??!?!??!!?!? scala> val a2: A = { name: String => "Hello, " + name } a2: A = $$Lambda$1050/812031404@629adce scala> a2.greeting("Arai-san") res
概要 PlayFrameworkやAkka HTTPをつかっていて、うまくパフォーマンスがでなかった経験ありませんか? もしかしたらそれ、スレッドプールをうまく分割できていなかったからかもしれません。 PlayFrameworkやAkka HTTPなど、ノンブロッキングI/Oを前提につくられたライブラリやフレームワークでは、ブロッキングI/Oに十分な注意を払う必要があります。 具体的に言うと、ノンブロッキングI/Oの処理のみを実行するスレッドプールと、ブロッキングI/O(I/O待ちによりスレッドを占有する)を含む処理を実行するスレッドプールは分割し、それぞれ適切に設定する必要があります。 なぜスレッドプールをわけるか ノンブロッキングI/Oはその特性上、I/O待機中にCPUやスレッドを専有せず、他の処理に割り当てることができます。 この特性を活かし、PlayFrameworkやAkka H
概要 gatlingという負荷試験ツールの結果が見栄え良いとのことで試してみた。 どんなものか ScalaなDSLでテストケースを記載するjmeter的なもの。QuickstartとAdvanced Tutorialを実施するとどういうものかわかるかと。 DSLの独特な所としてはUserとScenarioという概念があり、実際に人がブラウザを操作してる感覚+高級言語で表現できるは良いかと。 例えば「hoge.comの/hoge見た後/fugaを見る」というScenarioのUserを10分間に100User分負荷を発生、という感じで、ユーザがブラウザを操作する振る舞いをDSLにいい感じに表現できる。 実際にはwebアプリは複数のページ遷移で1アクションなこともあるので、このように書けると便利そうね、と。 導入 以下、linuxの場合。 jdk落としてきてインストール Gatling Pro
DIを使わない状態ではUserRepositoryというインターフェースが定義されているのにもかかわらず、UserServiceはUserRepositoryImplの参照も持っていました。 これではせっかくインターフェースを分離した意味がありません。 UserServiceがUserRepositoryインターフェースだけを参照(依存)するようにすれば、具体的な実装であるUserRepositoryImplの変更に影響されることはありません。 この問題を解決するのがDIの目的です。 それではDIのインジェクタを加えて、上記のクラス図を修正しましょう。 謎のインジェクタの登場によりUserServiceからUserRepositoryImplへの参照がなくなりました。 おそらくインジェクタは何らかの手段でサービスであるUserRepositoryImpl(Dependency)をクライアン
case class Cont[R, A](run: (A => R) => R) { def map[B](f: A => B): Cont[R, B] = Cont(k => run(a => k(f(a)))) def flatMap[B](f: A => Cont[R, B]): Cont[R, B] = Cont(k => run(a => f(a).run(k))) } ここで重要なのは Cont のコンストラクターに渡される run 関数です。 この run 関数を作り Cont のコンストラクターに渡すことで、継続モナドを作ることができます。 それで run 関数の型を見てみますと (A => R) => R とあります。 A => R という型の関数を受け取り、おそらく受け取った関数を実行し R という結果を返すという動作が期待できます。 ここで A を全体の中の途中の計
プログラミング言語同士の比較をするとき、ある言語が別の言語より複雑であるということがよく批判の対象になります。たとえば、C++は複雑過ぎる、Scalaは複雑過ぎる(Javaと比較して)、といった意見をよく耳にします。 しかし、実際に客観的な指標に基いて比較してみたことがある人はあまり居ないのではないでしょうか。自分がみる限り、その人がこれまで学んできた言語と比較して、「難しく感じた」ことをもって「複雑だ」という主張をしていることが多いように思います。 しかし、複雑である <=> 難しい(と感じる)も必ずしも正しくありませんし、単純である <=> 簡単であるとも限りません。 このエントリでは、JavaとScalaの構文を比較して、よく言われる「Scalaは複雑である」という主張に反して、「Scalaの方が単純である」ということが言える(ただし、Scalaの方が簡単であることは意味しない)とい
Scala関西 Summit 2017 で公開されました資料の一覧ですー。 ※Twitterで拾えた分だけですので、他にもありましたら、追記したいので教えていただけると嬉しいですー。 セプテーニ・オリジナルホール Non-Functional Programming in Scala - 竹添 直樹 Scala and Akka apps on Kubernetes in ChatWork - 林 大介(hayasshi) 実践ScalaでDDD - 辻 陽平 ストリーム処理ことはじめ ~ Akka Streams - にしかわささき Not Found グラフを知って理解するAkka Stream - kamijin_fanta Reladomo in Scala - 伊藤博志/瀬良和弘 「Scale with Scala」の道程 - 松坂 高嗣 Not Found Scala on
Scalaでメタプログラミングをするためのライブラリ http://slides.com/cb372/metaprog-shapeless-matsuri-2017#/ https://github.com/blast-hardcheese/talks/tree/scala.meta-crash-course なぜ話題になっているのか これまでScalaでマクロを書くにはscala-reflectを使っていた ところがscala-reflectを使ったマクロはdeprecatedになるらしい これからはscala.meta scala.metaで何ができるか Scalaのプログラムをいじることができる def addStat( classDefn: Defn.Class, stat: Stat): Defn.Class = { val templ = classDefn.templ val
Wercker はプライベートリポジトリが無料で使える CI サービスとして有名ですが、Wercker CLI を使ったローカル開発もかなり便利です。 今回は Scala 開発環境を Docker で構築するために Wercker CLI を使ってみます1。 準備 Docker engine と Wercker CLI をインストールしてください。Wercker CLI は Github のダウンロードページ から適切なバイナリをダウンロードしてきて chmod +x して PATH に置けば OK です。 ※Wercker CLI 最新版の 1.0.882 ではこの記事のサンプルは動作しません。Docker container exits (exit status 130) · Issue #312 · wercker/wercker と同様のエラーが発生してしまいます。1つ前のバージョ
はじめに 某記事で、 implicitsなんて呼ばないで、各機能ごとに適切な名称で呼ぼう。あと、重要なのは型クラスだからそれだけ注意すればOK、という趣旨のことを書きましたが、どうやって使えばいいかは投げっぱなしだったのでその導入編だけでも書こうかと思います。この記事での目的は簡単で、 Scalaのコレクションのsumメソッド(とproductメソッド)を自作の有理数クラスに適用できるようにしよう ということになります。実際のところ、sumメソッドを整数リストに対して呼び出す、たとえば でも、型クラスを「使って」はいるのですが、実際に型クラスに新しいインスタンスを追加していないので、使った実感がわかないと思います。そこで、有理数クラスです。実装が比較的簡単である上に、四則演算への対応が容易という点でこれを選ぶことにしました。 まずは、有理数クラス(Rational)の実装です。ここは、本題
Help us understand the problem. What is going on with this article? JavaプログラマのためのKotlin入門という記事があったので、マネして、ScalaプログラマのためのKotlin入門を書いてみることにしました。二番煎じとか言わないでね! Kotlinって何? 「Kotlin が Android の公式言語になることが Goole I/O 2017 で発表されました。」らしいです。Scalaプログラマが今後Kotlinを始めることが今後多くなると思うので、Kotlinをスムーズに始められるように次の 3 点についてまとめます。 Scalaとほぼ同じところ 違う考え方が必要でつまづきがちなところ Kotlinならではの不便なこと Kotlinって何?は元記事にあるのではしょります。元記事は連載形式だそうですが、今回の記事
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? この記事はAizu Advent Calendar 2015 @ababup1192の記事です。 innocentyknrさん <- 前の人 ・ 次の人 -> masapontoさん 記事の内容 AltJSの一種であるScala.jsをオススメする記事です。以下の点を軸として紹介をしていきます。ScalaとScala.jsの魅力を語り続ける記事なので、環境構築資料としては役に立たないと思います。 Webフロントエンド開発の現状と環境 言語の強み Scala.jsを使ったモダンな開発 Scala.jsとは 名称から分かる通りAltJSの一
対象読者 Scala はそれなりに使える モナドって聞いたことあるけどよくわかってない Scalaz は聞いたことない or 聞いたことあるけど使えない Haskell こわひ モナドの解説記事は星の数ほど出てきますが、ほとんどが Haskell の暗号 で書かれています。筆者が Scala の人で Haskell こわひ勢なので、ちょっとまとめました。 知ってる人にとっては基礎的すぎると思います。また主に自分の思考整理のための記事です。ツッコミ所は多いかと思います。ご了承ください。 基礎事項 Scala をそれなりに使えない人のために、今回使う道具の基礎事項をまとめています。 Scala はそれなりに使える人は飛ばしていただいて問題ありません。 Option 型 Scala には 「あるかもしれないけど、ないかもしれない」 状態を扱うことができる Option 型というものがあります。例
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? フレームワーク・プログラミング言語の技術選定 こんにちは 私は昔、プログラミング言語さえできれば自由自在にすぐ便利なWebアプリケーションが作れると思っていましたが、そうでもないようですね。 現代は研究者同士が情報をやり取りしていたWeb初期とは大きく異なり、多くの人が利用するインフラとしてWebが育ってきました。 パフォーマンスやセキュリティなど多様な面で高まり続けるお客様のニーズに対し、自分でログインやセッション管理にDB接続やリクエストの処理を実装するのはとても大変です。しかもがんばったところで技術的に他者との差別化に繋がるかは別
先に結論 Swiftのstaticメソッド制約はちょっとしたシンプルな機能に見えるけど便利で深い Kotlin, TypeScript, Java で同じことをすると冗長で間接的なコードになってしまう TypeScriptのstaticメソッド注入は独特のテクニックで面白い 提示するJavaの実装は「T を new する」方法でもあるので参考にして Scala は間接的ではあるもののKotlinより良い形でかける SwiftはScalaの形をさらにより良くした形とみなすことができる C++はSwiftと同じ事ができるがわかりにくい書き方になってしまう 導入 Swiftはprotocolという機能で、Javaのinterfaceのように型がインスタンスメソッドをもつ事を強制する事ができます。そしてSwiftではそのメソッド制約として、インスタンスメソッドだけではなくスタティックメソッドをもつ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く