技術情報
やっちゃたよ俺様JavaVM
ある日、非常に控えめのOS上で動くプログラムをC++で作って欲しいと頼まれました。C++はいろいろと面倒なのであまりできれば使いたくありません。そこで、だめもとで交渉したところ「リアルタイム性が保証できるんだったらJavaでもいいですよ」ということだったので、俺様JavaVM(Virtual Machine)を作ることにしました。そういう訳で、たまに俺様JavaVMの状況を報告します。
技術情報
C言語のマクロで関数型オブジェクト指向プログラミング
最近、久しぶりにC言語を使った。
数百個くらいある良く似た関数を宣言するのに、C++言語のテンプレートを使ってはいけないという状況に遭遇したのでマクロで挑んでみた。
そのときに使った技を紹介する。
技術情報
プログラムは語る: toString編3
[intlink id=”133″](前回)の最後に『しかし、まだ改良する余地はあります。ヒントは「メソッドtoString(Collection)がどのように使われるのか?」です。』と謎を残しておきました。今回はその謎解きです。性能に注目して前回のプログラムを見てください。
前回のプログラム
import java.util.Iterator;
import java.util.Collection;
public class CollectionUtility
{
public static String toString(Collection aCollection)
{
String tString = "";
Iterator tIterator = aCollection.iterator();
if(tIterator.hasNext())
{
tString += tIterator.next();
while(tIterator.hasNext())
tString += ", " + tIterator.next();
}
return tString;
}
}
技術情報
プログラムは語る: toString編2
前回のプログラムは改良したとは言え、まだまだ突っ込みどころ満載です。そういう訳なので、今回も更に指摘して行きます。
今回はaCollection
の要素を順に取り出す処理の実現方法に注目します。前回のプログラムの何が良くないのか分かりますか?
前回のプログラム
import java.util.Iterator;
import java.util.Collection;
public class CollectionUtility
{
public static String toString(Collection aCollection)
{
Object tBuffer;
String tString = "";
Iterator tIterator = aCollection.iterator();
for(int i = 0; i < aCollection.size(); i++)
{
if(i == 0)
{
tBuffer = tIterator.next();
tString += tBuffer;
}
else
{
tBuffer = tIterator.next();
tString += ", " + tBuffer;
}
}
return tString;
}
}