IBM Developer is your one-stop location for getting hands-on training and learning in-demand skills on relevant technologies such as generative AI, data science, AI, and open source.

なぜScalaがバカ向けなのか。 ぼくの経験を元に、バカ向け言語と非バカ向け言語を比較しながら見て行きましょう 非バカ向け言語 C プログラマーとして最初に携わったのがC言語です。 それは以下のようなものでした。 何十ものファイルにまたがるグローバル変数 緻密な制御が必要であるにも関わらず、無秩序に取得/開放が行われているメモリー管理 このような複雑な構造を、ぼくのようなポケコン並の処理能力しか持たないバカに把握可能でしょうか。もちろん不可能です そこで、次のようなコーディングを心がけました。 グローバル変数を使わず、関数に引数を定義して渡す メモリーの取得/解放を同一ファイル内に限定する これで、メモリーや変数参照の影響範囲を限定し、ぼくのようなバカでも理解できるようになります。 ですが、わざわざそんな事をやらなくても全てを理解できるエリート様達は、 「なぜ引数で渡すんだ。グローバル変数
「少数精鋭の開発メンバーで、短期間に新しい検索サービスを始められた」。特許情報などの無料検索サービスで200万人以上の会員を抱えるアスタミューゼ。同社でサービス開発を統括する三木隆史プラットフォーム事業部部長は、こう語る。スピードの秘密は、開発言語選びにあった。 同社が採用したのは、業務系システムの開発で主流になっているJavaでも、Webシステムで人気を博すRubyやPythonでもない。「関数型プログラミング言語」と呼ばれるオープンソースの開発言語の一つ、「Scala(スカラ)」だ。 Scalaは今、世界的な注目を集める。米ツイッターや米リンクトイン、英ガーディアンなど海外の名だたる企業が自社サービスの開発に採用したことで一気にその名を知らしめた。Scalaの推進企業である米タイプセーフは2012年8月に1400万米ドル(約11億円)の資金を調達。Webアプリケーションや分散処理システ
概要java.io.Consoleを使うと、コンソールアプリが組めるのですが、Mac OS X上の標準JREではあまりうまく動きません。OpenJDKならもうちょっとマシなのかもしれませんが、いろんな理由からJLineを使ってみようと思います。JLineは、Un*xでよく使われるreadlineライクな文字列入力ライブラリです。ダウンロードhttp://jline.sourceforge.net/ここからJLine 1.0がダウンロードできます。バイナリを引っ張ってきましょう。すでにJLine 2もあるんですが、JLine 1.0で欲しい機能は一応持っています。Hello今回はただ単に入力プロンプトを出力し、入力したコマンド文字を再表示するだけにします。ソースimport jline._ object Hello extends App { def prompt(reader: Conso
コードレビューについて Oh, you `re no (fun _ → more) より引用 単に普段の開発で使っている VCS でそれを行なっていました。 つまり、コードの中にコメントの形でレビューを書き、それをコミットする。 そしてそこから派生する議論も全てコード上のコメントで行います。 (もちろん複雑な話になった場合は直接の議論を行い、合議の結果だけを記しておく、なども当然あるでしょう。) レビューをソースコードのコメントとして直接書き込むのは、GHC の開発でも時々見かけますね。例えば、新機能の開発 branch を作って、新しい機能を開発している時とか。 2012-08-14 18:44:19 via OpenTween まあ、主に入った変更に Simon Peyton Jones が(ソースコード上で直接)コメントしそれに従ってソースコードを修正する形なので、レビューと言えるほ
Scalaに限らず、関数型言語の入門記事には、必ずといっていいほど、最初の方でリスト型が出てきます。不変データ構造として単純なので説明しやすいことや、実際に小さなコレクションとしてリストを使うことが多い事など、理由は色々あるでしょう。 まあ、それはどうでもよくて、今回はScalaにおけるリストの実現であるscala.Listが共変でなければいけない理由をちょっと説明してみようと思います。実は、他の静的型付け関数型言語のリスト型、たとえばSMLやOCaml、Haskellにおけるリスト型は共変ではありません*1(そもそもOCaml以外はサブタイプが無いですが…)。共変についての解説は面倒なので省きます。 結論を一言で書くと、共変でなければ空のリスト(Nil)値が簡単に作れないからです。 仮にscala.Listが共変でなかったとします。このとき非常に困るのは、空のListであるNilの型は一
JavaのGenericsよりも便利なScalaの型パラメータ:スケーラブルで関数型でオブジェクト指向なScala入門(8)(1/2 ページ) 前回のおさらいと今回の内容 前回の記事「Scalaのトレイトでプログラマをミックスインしてやんよ」では、Scalaの重要な機能であるトレイトの基本的な使い方から始まり、複数のトレイトを積み重ねた場合にどのような順番で線形化されるかについても紹介しました。今回は型のパラメータ化について紹介します。 第1回記事では、Scala標準のREPLとScala IDEで動作を確認してみました。今後本記事のサンプルコードは、どちらで確認しても問題はありませんが、対話的に実行でき、1文ごとにコードの結果が分かって便利なので、基本的にはREPLを用いて説明していきます。 Scala IDEを使用する場合、第1回記事の『Scala IDE for Eclipseで「H
September 24, 2013: Updated statistics for JavaOne. March 24, 2013: Updated statistics and load tests for Devoxx France. June 24, 2012: Play Performance Fix. June 19, 2012: Published for ÜberConf. Why a Smackdown? Play 2 and Grails 2 are often hyped as the most productive JVM Web Frameworks. * We wanted to know how they enhanced the Developer Experience (DX). Happy Trails Requirements Server-side
Java 8はついにラムダ式を導入します。ラムダ式自体は2009年からProject Lambdaで利用することができました。当時はラムダ式はJava Closuresと言われていました。サンプルコードを紹介する前に、ラムダ式がJavaプログラマにとってなぜ歓迎すべき機能なのかを説明しましょう。 なぜラムダ式を使うのか ラムダ式の一般的な使い方はGUI開発においてです。一般的に、GUIプログラミングではイベントと結びつく振る舞いを解決する必要があります。例えば、ユーザがボタンを押したとき(イベントが発生したとき), プログラミングは何らかの処理を実行する必要があります。例えば、Swingでは、次のコードで示すようにActionListenersを使います。 class ButtonHandler implements ActionListener { public void actionP
Quantum Shift: Rewiring the Tech Landscape Teena Idnani explains the core concepts of quantum computing, its transformative potential across industries (pharmaceuticals, finance, etc.), and the current state of quantum technology. She addresses the threats (breaking RSA encryption) and opportunities, offering practical guidance on how software developers, architects, and engineering leaders can pr
Quantum Shift: Rewiring the Tech Landscape Teena Idnani explains the core concepts of quantum computing, its transformative potential across industries (pharmaceuticals, finance, etc.), and the current state of quantum technology. She addresses the threats (breaking RSA encryption) and opportunities, offering practical guidance on how software developers, architects, and engineering leaders can pr
あまり意味のない小ネタです。 JavaScriptで使われるテクニックとして、即時関数というものがあると思います。こういうやつですね。 immediate_func.js (function (firstName, lastName) { println("Hello! [" + firstName + " " + lastName + "]"); })("Taro", "Tanaka") 実行すると $ jrunscript -f immediate_func.js Hello! [Taro Tanaka] ちなみに、jrunscriptというのはJDKに同梱されているJavaScriptの実装(Rhino)ですね。 $ jrunscript -q Language ECMAScript 1.8 implemention "Mozilla Rhino" 1.7 release 3 PRE
今日の小ネタ、第2弾。ホント、なんとなく書いてます…。 ScalaにはOptionというクラスがあって、標準ライブラリやら普通のアプリケーションのコードの至る所に出てきます。これは、どこぞのMaybeモナド…にあたるものだと思うのですが、これをGroovyで書いてみようと思います。 まずは、最上位のインターフェース。 Monad.groovy interface Monad<T> { Monad<T> flatMap(Closure closure) void foreach(Closure closure) Monad<T> filter(Closure closure) } Monadインターフェースに要求するものが、どう見てもScalaです…。 *withFilterというのはさておき あと、Groovyにジェネリクスを書いてもあんまり意味がないのはわかってますが、一応ということで。
流出云々で「パスワード」がバズってたので、「バズワード」を連想したわけです。 そこから昨日FizzBuzzを書いたりしたものだから、こうなります。 で。FizzBuzzはあるということで…… これで。 *Main> filter (\a -> a == "Buzz") $ map fizzBuzz [1..100] ["Buzz","Buzz","Buzz","Buzz","Buzz","Buzz","Buzz","Buzz","Buzz","Buzz","Buzz","Buzz","Buzz","Buzz"] ……。 実行前に気づきましたけどね! タプルを返すようにする。 map (\a -> (a, fizzBuzz a)) [1..100] 二番目の値でフィルタリング filter (\(a, b) -> b == "Buzz") $ map (\a -> (a, fizzBuzz
Scalaでテキストの類似度計算の前処理として全角を半角に変換したいんだけど、commonsとかにも無いみたい。まあ、日本人とかにしか関係ない処理だしなぁ。 正規表現でゴリゴリやっても良かったのだけど、どう考えても車輪の再発明だと思って探してみたらIBMのICUってのを使うのが良いみたい。 というわけでScalaで使ってみました。build.sbtには下記を追加。 libraryDependencies += "com.ibm.icu" % "icu4j" % "49.1" サンプルは下記の通り. import com.ibm.icu.text.Transliterator val transliterator = Transliterator.getInstance("Fullwidth-Halfwidth"); assert("這いよれ! ニャル子さん 4".equals(transl
タイトルは釣りです。先日、大昔に見た懐かしい記事が翻訳されていました。この記事自体ははっきり言って、ScalaはOCamlではないということを言葉を変えて延々と言ってるだけなので、どーでもいいです。3年も前の英語記事がTwitter上で今更注目された事に驚きです。 さて、本題に入りましょう。元記事の言っている事はおいておいて、Scalaの核言語は(若干風変わりな)クラスベースのオブジェクトシステムであるという事は、頭の片隅においておくと良いと思います。Scalaの関数型プログラミングサポートの多くは、関数型言語に見られる機能をオブジェクト指向的に再解釈して取り込んだものであり、中心にあるのはあくまでオブジェクトです。 (追記) 核言語(core language)という言葉に馴染みが無い方も居ると思うので、説明を追加します。核言語という考え方は、プログラミング言語を、まさにその核である核言
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く