Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Java開発者のためのCurl言語講座(データ型)
10-20-2011, 04:18 PM, (This post was last modified: 10-20-2011, 04:31 PM by hokada.)
#1
Java開発者のためのCurl言語講座(データ型)
続けてデータ型の記事を投稿します。

<プリミティブ型>
まずはプリミティブ型ですが、多くのJavaと同様の型を持っています。

Javaでは、int, byte, short, long, char, float, double, booleanですが、Curlでは、int(もしくはint32), byte(もしくはuint8), int16, int64, char, float, double, boolです。

また、Curlではunsignedも持っています。uint(uint32), uint8, uint16, uint64です。


但し、Javaのようにプリミティブ型のラッパークラスは標準では持たないです。もし作るなら、例えばこんな感じになります。
Code:
{define-class public Integer

  field private value:int

  {method public {long-value}:int
    {return self.value}
  }
  || TODO: その他いろいろなメソッド....

  {constructor public implicit {default value:int}
      set self.value = value
  }
}

使うときは、こんな感じです。
Code:
let i1:Int = 10000
let i2:Int = {Integer 10000}

クラスの作り方について詳しくはまた別の回でご説明したいと思いますが、もしラッパークラスが必要だというニーズがあれば、我々で作って提供することも検討しますので、コメントください。

<文字列>
次に文字列ですが、これはJavaと同様でStringです。また、JavaのStringBufferにあたるものはStringBufです。


<日付>
日付型については仕様が異なってきますが、JavaではDate, Time, Calendarという型がありますが、CurlはDateTimeという型になります。

Code:
def now = {DateTime}


<数量>
Javaにはない機能で、Curlでは"数量"という特別な型の値をサポートします。例えば、距離とか時間とかです。
Code:
def v1 = 2.5cm || センチメートル
def v2 = 3.5s || 秒
def v3 = 10kg || キログラム

この時間(Time)と先ほどのDateTimeを使って、時間の加算・減算なども可能となっています。
Code:
let dt:DateTime = {DateTime}
{value dt - 10s}


<配列・リスト・連想配列>
配列はJavaではこんな感じ。
Code:
int[] array = new int[10];

Curlでは、FastArray-ofというものに相当しますが、これはクラスとなっており、ちょっと書くのがめんどくさくて
Code:
def array = {{FastArray-of int} max-size = 10}

リストは、JavaではList/ArrayListをよく利用すると思いますが、CurlではArray-ofというものに相当します。また、連想配列はJavaではMap/HashMapなどで、CurlはHashTable-ofなどに相当します。
Code:
List list = new ArrayList();
Map map = new HashMap();

list.add(1);
list.add(2);
Integer i = list.get(0);
map.put("k1", "v1");
map.put("k2", "v2");
String s = map.get("k1");

Javaでは、ジェネリクスにプリミティブ型は指定できませんが、このArray-ofは指定が可能です。
Code:
def list = {{Array-of int}}
def map = {{HashTable-of String, String}}

{list.append 1}
{list.append 2}
def i = list[0];
set map["k1"] = "v1"
set map["k2"] = "v2"
def s = map["k1"]


<Curl独自のその他のデータ型>
Javaにはないもので、any型というものがあります。
これはObject型とは違ってプリミティブも含めてすべて格納できる特別な型です。
但し、メモリを多く利用するので、多用はなるべく避けた方がよいです。

また、Curlは型が厳密な言語で、nullを許容するかどうかということも宣言する必要があります。例えば、Javaでは”String str = null;”というコードはOKですが、Curlでは、"let str:String = null"は許されません。この場合、nullを許容するよ!ということをシャープ("#")を利用して、宣言する必要があります。
Code:
let str:#String = null


最後に、浮動小数点の演算で、double型を利用すると誤差が発生することがありますので、JavaですとBigDecimalを利用することがありますが、Curlでも類似のDecimal型というものをバージョン8でリリースしています。バージョン8以前を利用したい場合は、別途オープンソースで、BigDecimalというものをWSDKCurl ORB というオープンソースの中で提供しています。

Reply

Forum Jump:


Users browsing this thread:
1 Guest(s)

MyBB SQL Error

MyBB has experienced an internal SQL error and cannot continue.

SQL Error:
1017 - Can't find file: 'mybb_threadviews' (errno: 2)
Query:
INSERT INTO mybb_threadviews (tid) VALUES('315')