2013年4月21日日曜日

[CoffeeScript]戻り値のないメソッドを作る方法

CoffeeScriptでメソッドを作ると、必ず最後の文の結果が戻り値として返されてしまいます。

例えば、下のメソッドの場合「2 * 5」がメソッドの最後の文なので、このメソッドは必ず「10」を結果として戻します。
method = ->
  2 * 5

このように、常に最後の文の結果が返されてしまうので、基本戻り値のあるメソッドになります。
もし、どうしても戻り値のないメソッドを作りたい場合、下のメソッドのように明示的に「undefined」を返すと戻り値のないメソッドを作れます。
method = ->
  return undefined

2013年4月11日木曜日

[Oracle]V$SESSIONに接続元を識別する情報を格納する方法

JDBCでOracleデータベースに接続した場合に、セッション情報を確認するビュー(V$SESSION)のPROGRAM列に任意の値を設定する方法。

OracleDataSourceの接続プロパティに対して、キー:v$session.program、値:接続元を示す値を設定することで、任意の値をV$SESSIONのPROGRAM列に表示出来る。
※デフォルト(thin接続の場合)の場合、'JDBC Thin Client'と表示される。

実装例

この例の場合、PROGRAM列には「任意の値」が表示される。
dataSource.setURL("jdbc:oracle:thin:@localhost:1521:hoge");
dataSource.setPassword("hoge");
dataSource.setUser("hoge");
Properties properties = new Properties();
// v$session.programをキーにして、クライアントを識別する値を設定する。
properties.setProperty("v$session.program", "任意の値");
dataSource.setConnectionProperties(properties);

2013年4月7日日曜日

[CoffeeScript]ヒアドキュメント

coffeescriptでのヒアドキュメントのまとめ。

コメント

ブロックコメントなだけなので、ヒアドキュメントではないかもしれませんが。
1 ###
2   console.logにメッセージを出力する。
3 ###

JavaScriptに変換されると
1 /*
2   console.logにメッセージを出力する。
3 */

文字列

例を見るとわかりますが、変数を展開することもできます。
1 str = "さしすせそ"
2 here = """
3 あいうえお
4 かきくけこ
5 #{str}
6 """

JavaScriptに変換されると
1 str = "さしすせそ";
2 
3 here = "あいうえお\nかきくけこ\n" + str;

正規表現

文字列と同じように変数の展開ができます。複雑な正規表現を定義するときに便利な気がします。
1 str = "い"
2 pattern = ///
3 # コメントも書ける
4 #{str} # 変数の展開もできる。
5 6 7 8 ///

JavaScriptに変換されると
1 str = "い";
2 
3 pattern = RegExp("あ" + str + "うえお");

2013年4月6日土曜日

[CoffeeScript]配列のプロパティやメソッド

CoffeeScriptの配列のプロパティやメソッドの使い方。

 1 array = [1..10]
 2 
 3 #### 配列の長さ
 4 array.length
 5 
 6 #### 要素を連結
 7 # 引数なしは、「,」で連結
 8 array.join()
 9 # 引数を指定するとその文字で連結
10 array.join('-')
11 
12 #### 指定した範囲の新しい配列を生成
13 # 開始インデックスはその値を含む(0始まり)
14 # 終了インデックスはその値を含まない
15 array.slice(2, 4)
16 
17 #### 配列同士の連結
18 array.concat [11..20]
19 
20 #### 配列の各要素の値を変更
21 # 配列の各要素を2倍
22 num * 2 for num in array
23 # 大文字に変換
24 c.toUpperCase for c in ['a', 'b', 'c']
25 
26 # 上の例と同じ事をmapメソッドで
27 array.map (n) -> n + 1
28 
29 #### フィルタをかけて新しい配列を生成
30 # 5以下の値だけを持つ配列を生成
31 num for num in array when (num <= 5)

2013年3月31日日曜日

[CoffeeScript]配列内に値が存在しているかチェック

変数 in 配列を使用して、変数の値が配列に存在しているかのチェックが出来る。


1 # strは、["str", "str2"]に含まれているのでtrue
2 "str" in ["str", "str2"]
3 
4 # strは、["str1", "str2"]に含まれていないのでfalse
5 "str" in ["str1", "str2"]

2013年3月26日火曜日

SQL Serverでダミー表へのアクセス

SQLServerでOracleのdual表のようなダミー表へアクセする方法。
ダミー表は、SQL関数の確認等で簡単に使うことができるので非常に便利です。

SQLServerの場合は、select句だけを定義しfrom句以降を省略することでダミー表へアクセスすることができます。

固定値を取得する場合は、select句に固定値を設定します。
1 select 1

select句に関数を列挙すると関数の呼出結果を確認することができます。
1 select sysdatetime();
2 select len('12345');

2013年3月24日日曜日

[CoffeeScript]switch文

coffeescriptでのswitch文の書き方。

基本的な書き方

 1 month_name = switch month
 2   when 1
 3     'January'
 4   when 2
 5     'February'
 6   when 3
 7     'March'
 8   when 4
 9     'April'
10   else
11     'other'

コンパイルされたJavaScriptはswitch文が即時関数でラップされています。
 1 month_name = (function() {
 2   switch (month) {
 3     case 1:
 4       return 'January';
 5     case 2:
 6       return 'February';
 7     case 3:
 8       return 'March';
 9     case 4:
10       return 'April';
11     default:
12       return 'other';
13   }
14 })();

いずれかにマッチしているかをswitch文で実現する

カンマ区切りで複数の条件を指定すると、switchで指定した値がリスト内に含まれていた場合、そのcase文が実行されます。
 1 season = switch month
 2   when 12, 1, 2
 3     "冬"
 4   when 3, 4, 5
 5     "春"
 6   when 6, 7, 8
 7     "夏"
 8   when 9, 10, 11
 9     "秋"
10   else
11     "不明"
12 console.log(season)

JavaScriptになると、それぞれの条件がcase文に展開されていることがわかります。
 1 season = (function() {
 2   switch (month) {
 3     case 12:
 4     case 1:
 5     case 2:
 6       return "冬";
 7     case 3:
 8     case 4:
 9     case 5:
10       return "春";
11     case 6:
12     case 7:
13     case 8:
14       return "夏";
15     case 9:
16     case 10:
17     case 11:
18       return "秋";
19     default:
20       return "不明";
21   }
22 })();