第3回 GaucheでRDBプログラミング
吉田 裕美
有限会社イーワイオフィス
2009/1/16
Lispの一種であるScheme。いくつかある処理系の中でも気軽にスクリプトを書けるGaucheでLispの世界を体験してみよう(編集部)
- - PR -
皆さま、明けましておめでとうございます。本年もよろしくお願いいたします。
さて、今回はGaucheを使って、より大きなプログラムを書いていきます。Lispプログラミングの例題として、パズルのような難しいアルゴリズムを使ったプログラムもありますが、多くの読者の方はリレーショナルデータベース(RDB)をベースにしたWebアプリケーションを作られていると思います。
そこで、今回と次回でWebアプリを書いてみたいと思います。今回はRDBプログラミングを中心に学んでいきます。
Gaucheのデータ型とオブジェクトシステム
今回の主題であるWebプログラミングに入る前に、少しGaucheの基本的な事柄について学んでおきます。
GaucheはLispであり、関数が主役となりますが、オブジェクト指向言語の特性も持っています。ここではGaucheのオブジェクト指向には深く入りませんが、RDBとのインターフェイスではたくさんのクラスが登場するので簡単に触れておきます。
Gaucheには数値、文字列、リストやベクターなどたくさんのデータ型があります。そして、それらすべてに対応するクラスがあり、データはそれらクラスのインスタンスです。GaucheのオブジェクトシステムはJavaなどと同様にスロット(slot)と呼ばれるインスタンス変数を持っています。
Gaucheのデータは、describeという関数でそのデータが所属するクラスやスロットの情報を調べることができます。また、describe関数はデバッグ時などによく使うのでdという名前も付いています。
gosh> (describe 123) |
老婆心ですが、クラス名は<>が付くまたは付けなければいけないルールがあるわけではなく、シンボルに使える任意の文字列が使えます。しかし、習慣としてクラス名は<>でくくっています。
クラスの定義、使い方については後半でまた説明します。
コレクションとイテレータ
GaucheはLispですのでリストが主役ですが、ベクター(配列)やハッシュなどのデータの集まりを扱うクラスもあり、それらを統一した操作で扱えるコレクションフレームワークというモジュールが用意されています。
JavaSEのAbstractCollectionクラスの下に動的な配列(Array)やハッシュ(HashMap)、リスト(LinkedList)クラスがあるのと似ていますね。
コレクションフレームワークでは、コレクションのすべての要素に対し同じ操作を行う、特定の条件のものを見つけるなどの関数を抽象化したイテレータが定義されています。
例えば、以下のfor-eachは第2引数で指定されたコレクションの各要素に対し、第1引数で指定した関数(処理)を実行します。この例では、リスト、ベクター、文字列に対してその要素を表示(print)する操作を行っています。ちなみに、#<undef>やtなどのfor-each関数自身の戻り値はあまり意味がありません。
gosh> (use gauche.collection) |
次の例は、コレクションの全要素に対して指定された関数を適用し、その結果をリストで戻すmap関数です。また、ここではlambdaを使って無名関数で処理を定義しています。
gosh> (map (lambda(n) (+ n 1)) '(1 2 3)) |
mapの戻り値はいつでもリストですが、任意のコレクションを戻したい場合はmap-toを使います。
gosh> (map-to <vector> (lambda(n) (+ n 1)) #(1 2 3)) |
1/5 |
| Index | |
| GaucheでRDBプログラミング | |
| Page1 Gaucheのデータ型とオブジェクトシステム コレクションとイテレータ |
|
| Page2 GaucheのRDBインターフェイス SQLite3のインストール |
|
| Page3 GaucheのRDBプログラミング ORマッパーを作る Gaucheのクラスの定義、使い方 |
|
| Page4 ORマッパーの仕様 ORマッパーのコア部分 |
|
| Page5 スロット作成メソッドの定義 <orm>メソッド DBIインターフェイス |
|
| Gaucheでメタプログラミング |
| Coding Edgeお勧め記事 |
| いまさらアルゴリズムを学ぶ意味 コーディングに役立つ! アルゴリズムの基本(1) コンピュータに「3の倍数と3の付く数字」を判断させるにはどうしたらいいか。発想力を鍛えよう |
|
| Zope 3の魅力に迫る Zope 3とは何ぞや?(1) Pythonで書かれたWebアプリケーションフレームワーク「Zope 3」。ほかのソフトウェアとは一体何が違っているのか? |
|
| 貧弱環境プログラミングのススメ 柴田 淳のコーディング天国 高性能なIT機器に囲まれた環境でコンピュータの動作原理に触れることは可能だろうか。貧弱なPC上にビットマップの直線をどうやって引く? |
|
| Haskellプログラミングの楽しみ方 のんびりHaskell(1) 関数型言語に分類されるHaskell。C言語などの手続き型言語とまったく異なるプログラミングの世界に踏み出してみよう |
|
| ちょっと変わったLisp入門 Gaucheでメタプログラミング(1) Lispの一種であるScheme。いくつかある処理系の中でも気軽にスクリプトを書けるGaucheでLispの世界を体験してみよう |
|
TechTargetジャパン
- 実例で学ぶRailsアプリのテスト方法 (2011/12/22)
具体的なWebアプリを例に簡単なテストを使ったリファクタリングについ
て解説する - Railsの人気テストフレームワーク6選! (2011/8/18)
今回からテストを使ったリファクタリングを解説する。まずはRailsで人
気のあるテストフレームワークをいくつか紹介する - ActiveRecordの更新系操作 (2011/6/27)
Railsのモデル層を担当するActiveRecordを使った登録、更新、削除
など、更新系の機能を中心に見ていきます - 実例アプリで学ぶ“Railsらしさ”の基礎 (2011/5/26)
Ruby on Railsで書かれた実例アプリを取り上げて、初心者が陥りがちなコードの書き方を指摘します。より「Railsらしい」コードとは?
|
|

