ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

VB.NETやPerlの代入演算子

2006-08-26 22:10:43 | PG(言語比較)

C言語の「+=」等の代入演算子。他の言語にも派生しているけど、微妙に種類が違っている。まとめてみると、よく分かる(笑)

それにしてもVB.NETの「&=」は、C言語やJavaに慣れていると「あれ?」と思うなぁ。
VBの論理演算は「AND」であって「&」じゃないし、「|=」はVB.NETにも無いみたいだし。
答えは、VBの「&」は文字列の結合なので、「&=」も文字列の結合
ついでに「^=」もちょっと違和感。累乗の代入ね(苦笑)

不思議と言えば、Perlの「&&=」や「||=」。
「&&」「||」に当たるものは「and」「or」だったような気がするんだけど、代入演算には「&&」「||」を使っているのか?
「x=」なんて演算子があるんだから、「and=」「or=」、いやもっと略して「a=」「o=」とかだったら格好よかったのに(笑)

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Win32 経過時間

2006-08-22 15:28:43 | PG(言語比較)

プログラミング言語比較で、Win32の経過時間の計り方を追加。

  • time()はC言語の標準だが、秒単位。
  • GetTickCount()は精度があまりよくないらしい(数ミリ秒単位)。
  • timeGetTime()はマルチメディアタイマー。
  • QueryPerformanceCounter()はマイクロ秒単位(に近い)。が、OSによって使えたり使えなかったりするらしい。

使用したい場面によるのは当然としても、他の言語では実際の精度が分からなくても選択肢が少ない(例えばJavaならSystem#currentTimeMillis()を使うでしょ?Dateでもいいけど、中身は同じな気がする)ということを考えれば、普通はGetTickCount()を使っとけば無難な気がする。


time()は基点となる日付からの経過時間を秒単位で返すが、戻り値はtime_t型で実体はlong(32bit)。したがって2038/01/19 03:14:07までしか表せないのは有名な話。
でも実行時間を知りたいだけならtime()とtime()の値の差をとればよく、この時刻をまたいでも平気なはず。

コメント (1)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

isほにゃらら

2006-07-27 00:49:14 | PG(言語比較)
プログラミング言語比較の文字判断で、C言語のisdigitとかが抜けていたのはなんでだろう?
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

エンコーディングメモ追加

2006-07-24 22:51:41 | PG(言語比較)

エンコーディング(漢字コード体系)のJavaのSJIS以外のエンコードを追加。
って言っても、JavaでMS932以外は使ったことないけど…。

ついでにC#の932も追加。

ついでにコマンドプロンプトのコードページ変更するコマンドも追加。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Perlって難しい(笑)

2006-07-11 23:21:48 | PG(言語比較)

どうにもPerlってのはややこしい。使って慣れるしかないんだろうけど、その機会もあまりないしなー。でも今のうちに分かった部分だけメモ。

  • Perlって、二進数までちゃんと使えるのな。素晴らしい。
  • Perlって、クラス(っぽいもの)まで扱えるとは。
  • Perlって、ポインター(リファレンス)があったんだねぇ。しかし「型グロブ」とかいう奴との違い(利点)がいまいち分からない…。
  • Perlって、指数演算子がPL/Iと一緒だ…!
  • Perlって、サブルーチン呼び出しに「&」を付けるんだ。で、引数は常に配列になるんだ。
  • Perlって、文字列を複数書く演算子が「x」「x=」。単なるエックスだなんて…かっこよすぎる。他にそんな言語見たことない(笑)


コンストラクター相当のサブルーチンがPerlを象徴しているようで面白い。

sub new {
  my $class = shift;
  my $self = { var1 => 111, var2 => 222 }; #いわば変数定義
  bless $self, $class;
  return $self;
}

↓blessは$selfを返すから、returnを移動

sub new {
  my $class = shift;
  my $self = { var1 => 111, var2 => 222 };
  return bless $self, $class;
}

↓$selfを省略

sub new {
  my $class = shift;
  return bless { var1 => 111, var2 => 222 }, $class;
}

↓$classを省略

sub new {
  return bless { var1 => 111, var2 => 222 }, shift;
}

↓最後の戻り値がサブルーチンの戻り値となるので、returnは省略可能

sub new {
  bless { var1 => 111, var2 => 222 }, shift;
}

↓ちょっと改行

sub new {
  bless { #いわば変数定義
    var1 => 111,
    var2 => 222
  }, shift;
}

いきなり最後の形だけ見ても、意味わからないって!(苦笑)

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする