目次

前のトピック

< 基本的な構文

次のトピック

オペレータ >

このページ

Zephir は動的および静的な型があります。この章では、サポートされる型とその挙動に注目します:

動的な型

動的な変数はPHPでのそれと正しく同じです。それらは制限無しに異なる型に割り当ておよび再割り当てすることができます。

動的な変数はキーワード ‘var’ を使って宣言されなければならず、その挙動はPHPとよく似ています:

var a, b, c;

// 変数の初期化
let a = "hello", b = false;

// 値の変更
let a = 10, b = "140";

// それらの間でのオペレーションの実行
let c = a + b;

8つの型がありえます:

種類 解説
boolean boolean は真偽値を表します。‘true’ あるいは ‘false’ のどちらかです。
integer 整数値。integer のサイズはプラットフォーム依存です。
float/double 浮動小数点数。float のサイズはプラットフォーム依存です。
string string は文字の連なりで、文字はbyteと同じです。
array array は順番に並んだmapです。map は値がキーに関連付いた型です。
object PHPと似たオブジェクトの抽象
resource resource は外部リソースへの参照を保持します。
null 特別な NULL 値は、値を持たない変数を表します。

これらの型についての詳細は PHP マニュアルをチェックしてください

Boolean

boolean は真偽値を表します。‘true’ あるいは ‘false’ のどちらかです:

var a = false, b = true;

数字

整数値。integerのサイズはプラットフォーム依存ですが、最大値の通常の値は約200万です (符号有り32ビット)。64ビットプラットフォームは約 9E18 の最大値を持ちます。PHP は符号無しのintegerをサポートしないため、Zephirもこの制限を持ちます:

var a = 5, b = 10050;

整数のオーバーフロー

PHPとは対照的に、Zephirは自動的にintegerのオーバーフローをチェックしません。Cのように、大きな数を返すかも知れない操作をする場合は、それらを格納するために ‘unsigned long’ あるいは ‘float’ を使うことができます:

unsigned long my_number = 2147483648;

Float/Double

浮動小数点 (“floats”, “doubles” あるいは “real numbers” としても知られています)。浮動小数点の文字は0個以上の桁と、それに続くピリオド (.)、それに続く0個以上の桁を持つ表現です。floatのサイズはプラットフォーム依存ですが、最大で精度がおよそ十進数の14桁を持つ1.8e308が通常の値です(64 bit IEEE format)。

var number = 5.0, b = 0.014;

浮動小数点は精度の制限があります。システムに依存しますが、PHPのようにZephirは IEEE 754 倍精度フォーマットを使います。これは1.11e-16のオーダーでの丸めにより最大相対誤差が発生するでしょう。

文字列

string は文字の連なりで、文字はbyteと同じです。PHPのように、Zephirは256文字セットのみをサポートします。したがってネイティブなUnicodeサポートを提供しません。

var today = "friday";

Zephirでは、文字列の文字は(Cのように)ダブルクォートを使ってのみ指定することができます。シングルくぉおーとは文字のために予約されています。

以下のエスケープシーケンスが文字列内でサポートされます:

シーケンス 解説
\t 水平タブ
\n ラインフィード
\r キャリッジリターン
\ \ バックスラッシュ
\” ダブルクォート
var today = "\tfriday\n\r",
    tomorrow = "\tsaturday";

Zephirでは、文字列はPHPのような変数のパースをサポートしません。代わりに連結を使うことができます:

var name = "peter";

echo "hello: " . name;

配列

Zephirでの配列の実装は、基本的にPHPと同じです: 順番のある最適化された幾つかの異なる使用のためのマップ; 配列、リスト(vector)、ハッシュテーブル(mapの実装)、ディクショナリ、コレクション、スタック、キュー そして おそらくそれ以上。配列の値は他の配列に成り得るため、ツリーや多次元配列も可能です。

配列を定義する構文はPHPとはすこし異なります:

//配列を定義するには四角括弧があるべきです
let myArray = [1, 2, 3];

//ハッシュのキーを定義するには二つのコロンがあるべきです
let myHash = ["first": 1, "second": 2, "third": 3];

Only long and string values can be used as keys:

let myHash = [0: "first", 1: true, 2: null];
let myHash = ["first": 7.0, "second": "some string", "third": false];

オブジェクト

ZephirはPHPのオブジェクトからインスタンス化、操作、メソッドの呼び出し、クラス定数の読み込みなどができます:

let myObject = new stdClass(),
    myObject->someProperty = "my value";

静的型

静的型は開発者がCで利用可能ないくつかの変数型を宣言および使うことができます。変数は一回宣言されると静的な型のようにそれらの型を変更することができません。しかし、コンパイラがより良い最適化の仕事をすることができます。以下の型がサポートされます:

種類 解説
boolean boolean は真偽値を表します。‘true’ あるいは ‘false’ のどちらかです。
integer 符号有り整数。少なくともサイズが16ビット。
unsigned integer 符号無し整数。少なくともサイズが16ビット。
char マシーンの最小の取り組み可能な単位です。基本的な文字セットを含むことができます。
unsigned char charと同じサイズですが、符号無しであることを保証します。
long Long 符号有り integer 型。少なくともサイズが32ビット。
unsigned long longと同じですが、符号無しです。
float/double 倍精度の浮動小数点型。サイズはプラットフォーム依存です。
string string は文字の連なりで、文字はbyteと同じです。
array ハッシュ、マップ、ディクショナリ、コレクション、スタックなどとして使うことができる構造。

Boolean

boolean は真偽値を表します。‘true’ あるいは ‘false’ のどちらかです。動的な挙動とは反対に、静的なboolean型はそれらにどのような値が割り当てられるかを問わずboolean(trueあるいはfalse)を保持します:

boolean a;

let a = true,
    a = 100, // 自動的にtrueにキャストされます
    a = null, // 自動的にfalseにキャストされます
    a = "hello"; // コンパイラ例外を投げます

Integer/Unsigned Integer

Integer 値は動的な値でのintegerメンバと似ています。integer変数に割り当てられた値はintegerのままです:

int a;

let a = 50,
    a = -70,
    a = 100.25, // 自動的に100にキャストされます
    a = null, // 自動的に0にキャストされます
    a = false, // 自動的に0にキャストされます
    a = "hello"; // コンパイラ例外を投げます

符号無しintegerはintegerに似ていますが、符号を持ちません。このことはこれらの種類の変数の中で負数を格納できないことを意味します:

let a = 50,
    a = -70, // 自動的に70にキャストされます
    a = 100.25, // 自動的に100にキャストされます
    a = null, // 自動的に0にキャストされます
    a = false, // 自動的に0にキャストされます
    a = "hello"; // コンパイラ例外を投げます

符号無しintegerは標準のintegerの2倍の大きさです。符号無しintegerをintegerに割り当てると、データの喪失を意味するかも知れません:

uint a, int b;

let a = 2147483648,
    b = a, // データの喪失があるかも知れません

Long/Unsigned Long

Long 変数はinteger変数の2倍の大きさです。したがって、それらはより大きな数値を格納することができます。そのためintegerがlong変数に割り当てられる時は自動的にこの型にキャストされます:

long a;

let a = 50,
    a = -70,
    a = 100.25, // 自動的に100にキャストされます
    a = null, // 自動的に0にキャストされます
    a = false, // 自動的に0にキャストされます
    a = "hello"; // コンパイラ例外を投げます

符号無しlongはlongに似ていますが、それらは符号がありません。このことはこれらの種類の変数の中で負数を格納できないことを意味します:

let a = 50,
    a = -70, // 自動的に70にキャストされます
    a = 100.25, // 自動的に100にキャストされます
    a = null, // 自動的に0にキャストされます
    a = false, // 自動的に0にキャストされます
    a = "hello"; // コンパイラ例外を投げます

符号無しlongは標準のlongの2倍の大きさです。符号無しlongをlongに割り当てると、データの喪失を意味するかも知れません:

ulong a, long b;

let a = 4294967296,
    b = a, // データの喪失があるかも知れません

Char/Unsigned Char

Char 変数はマシーンの最小の取り組み可能な単位です。基本的な文字セットを含むことができます。各 ‘char’ 変数は文字列中の各文字を表します:

char ch, string name = "peter";

let ch = name[2]; // stores 't'
let ch = 'Z'; // char 文字はシングルクォートで囲まれなければなりません

文字列

string は文字の連なりで、文字はbyteと同じです。PHPでは256文字セットのみをサポートするため、ネイティブなUnicodeサポートを提供しません。

変数が宣言された文字の場合、それはその型を変更しません:

string a;

let a = "",
    a = "hello", //文字列の文字はダブルクォートで囲まれていなければなりません
    a = 'A', // 文字列 "A"に変換されます
    a = null; // 自動的に "" にキャストされます
TOP
inserted by FC2 system