<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>いちばんやさしいゲームの作り方 &#187; アサーション</title>
	<atom:link href="http://www.game-create.com/archives/tag/%e3%82%a2%e3%82%b5%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3/feed" rel="self" type="application/rss+xml" />
	<link>http://www.game-create.com</link>
	<description>文系の人でも、数理学がわからない人でもゲームプログラミングをマスターできるブログ</description>
	<lastBuildDate>Tue, 08 Jun 2010 01:28:47 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>assert() にエラーメッセージを渡す</title>
		<link>http://www.game-create.com/archives/1463</link>
		<comments>http://www.game-create.com/archives/1463#comments</comments>
		<pubDate>Mon, 30 Mar 2009 09:14:40 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[アサーション]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=1463</guid>
		<description><![CDATA[Byerkut さんのお気に入り関数 assert() 。しかしながら、これの出力は式になってしまうので意味を理解するのにちょっと時間がかかります。これにエラーメッセージを渡して意味を伝えやすくしようというテクニックとの [...]]]></description>
			<content:encoded><![CDATA[<p>Byerkut さんのお気に入り関数 assert() 。しかしながら、これの出力は式になってしまうので意味を理解するのにちょっと時間がかかります。これにエラーメッセージを渡して意味を伝えやすくしようというテクニックとのことです。</p>
<p><span id="more-1463"></span></p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-identifier">assert</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">argument は１以上じゃないとだめだ</span><span class="hl-quotes">&quot;</span><span class="hl-code"> &amp;&amp; </span><span class="hl-brackets">(</span><span class="hl-number">0</span><span class="hl-code"> &lt;</span><span class="hl-identifier">argument</span><span class="hl-brackets">))</span><span class="hl-default">;
</span><span class="hl-identifier">assert</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">pointer は NULL は受け取らない</span><span class="hl-quotes">&quot;</span><span class="hl-code"> &amp;&amp; </span><span class="hl-brackets">(</span><span class="hl-identifier">pointer</span><span class="hl-code"> != </span><span class="hl-prepro">NULL</span><span class="hl-brackets">))</span><span class="hl-default">;</span></pre></div></div>
<p>文字列は真と認識される点を利用したテクニックですね。「到達してはいけない」系の assert() は次のように書けます。</p>
<div class="hl-surround" style="height:16.8px;"><div class="hl-main"><pre><span class="hl-identifier">assert</span><span class="hl-brackets">(</span><span class="hl-code">!</span><span class="hl-quotes">&quot;</span><span class="hl-string">ここに到達してはいけない！絶対 break されるはずなんだ！</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-default">;</span></pre></div></div>
<p>ちなみに PHP だと文字列は０と認識される可能性が高い点に注意です。 PHP は文字列中に数字が一個も入ってないと０なのです。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/1463/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>そこ到達することが間違いであることを表明する</title>
		<link>http://www.game-create.com/archives/654</link>
		<comments>http://www.game-create.com/archives/654#comments</comments>
		<pubDate>Thu, 28 Aug 2008 10:00:53 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[TIPS]]></category>
		<category><![CDATA[アサーション]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=654</guid>
		<description><![CDATA[プログラムを書いていると設計がまずいのか「そこに到達することが間違いである」という部分ができることがあります。そういった場合は assert() を使ってコードに残すことができます。

switch (mode)
{ [...]]]></description>
			<content:encoded><![CDATA[<p>プログラムを書いていると設計がまずいのか「そこに到達することが間違いである」という部分ができることがあります。そういった場合は assert() を使ってコードに残すことができます。</p>
<p><span id="more-654"></span></p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-reserved">switch </span><span class="hl-brackets">(</span><span class="hl-identifier">mode</span><span class="hl-brackets">)
{
</span><span class="hl-reserved">case </span><span class="hl-identifier">HOGEHOGE_MODE</span><span class="hl-code">:
  </span><span class="hl-comment">// do someting
  </span><span class="hl-reserved">break</span><span class="hl-code">;
</span><span class="hl-reserved">case </span><span class="hl-identifier">ROMANTIC_MODE</span><span class="hl-code">:
  </span><span class="hl-comment">// do someting
  </span><span class="hl-reserved">break</span><span class="hl-code">;
</span><span class="hl-reserved">case </span><span class="hl-identifier">NEKOMIMI_MODE</span><span class="hl-code">:
  </span><span class="hl-comment">// do someting
  </span><span class="hl-reserved">break</span><span class="hl-code">;
</span><span class="hl-reserved">default</span><span class="hl-code">:
  </span><span class="hl-identifier">assert</span><span class="hl-brackets">(</span><span class="hl-code">!</span><span class="hl-quotes">&quot;</span><span class="hl-string">ここに到達してはいけない！</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-brackets">}</span></pre></div></div>
<p>式に文字列を指定して not にしているのがポイントです。もしそこへ到達してしまった際にはとてもハートフルなエラーメッセージが表示されることと思います。後の自分のために日夜 assert() を仕込みましょう。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/654/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>他のプログラマに「バグ」ではなく「仕様」だと主張する</title>
		<link>http://www.game-create.com/archives/521</link>
		<comments>http://www.game-create.com/archives/521#comments</comments>
		<pubDate>Wed, 30 Jul 2008 23:27:51 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[アサーション]]></category>
		<category><![CDATA[ネタ]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=521</guid>
		<description><![CDATA[他のプログラマに「バグ」ではなく「仕様」だと主張するためには assert() 関数を使います。

assret() 関数に自分のソースコード中で成り立つ恒等式を記述しておくことで、他のプログラマに対して「私はこの条件を [...]]]></description>
			<content:encoded><![CDATA[<p>他のプログラマに「バグ」ではなく「仕様」だと主張するためには assert() 関数を使います。</p>
<p><span id="more-521"></span></p>
<p>assret() 関数に自分のソースコード中で成り立つ恒等式を記述しておくことで、他のプログラマに対して「私はこの条件を満たしていることを前提に開発している」と主張することができるようになります。もし assert() 関数に書いた条件が満たされない場合は警告が表示されるようになります。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-types">int </span><span class="hl-identifier">someFunc</span><span class="hl-brackets">(</span><span class="hl-types">int </span><span class="hl-identifier">arg</span><span class="hl-brackets">)
{
  </span><span class="hl-comment">// arg は０以外の数値である必要がある
  </span><span class="hl-identifier">assert</span><span class="hl-brackets">(</span><span class="hl-identifier">arg</span><span class="hl-code"> != </span><span class="hl-number">0</span><span class="hl-brackets">)</span><span class="hl-code">;

  </span><span class="hl-comment">// 関数の中身
</span><span class="hl-brackets">}</span></pre></div></div>
<p>もし assert() 関数の警告に遭遇してしまった場合は、その仕様がアプリケーション全体として問題ないかを検討し、問題ある場合は、その assert() を使ったプログラマーや上長と議論するなどして解決する必要があります。 CVS と同様で assert() 関数を使う＝ソフトウェアの品質が上がるということではありません。 assert() 関数はきっかけに過ぎません。</p>
<p>また、 assert() 関数には副作用のある式を書くことはできません。これは assert() 関数がリリース時に削除される可能性があるためです（普通は削除します）。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-types">int </span><span class="hl-identifier">someFunc</span><span class="hl-brackets">(</span><span class="hl-types">int </span><span class="hl-identifier">arg</span><span class="hl-brackets">)
{
  </span><span class="hl-comment">// やってはいけない！これはリリース時に無くなる！
  </span><span class="hl-identifier">assert</span><span class="hl-brackets">(</span><span class="hl-identifier">arg</span><span class="hl-code">++</span><span class="hl-brackets">)</span><span class="hl-code">;

  </span><span class="hl-comment">// 関数の中身
</span><span class="hl-brackets">}</span></pre></div></div>
<p>assert() 関数はエラー処理ではなく、あくまで品質向上の仕組みというわけです。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/521/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows のアサーションがかっこよすぎる件</title>
		<link>http://www.game-create.com/archives/362</link>
		<comments>http://www.game-create.com/archives/362#comments</comments>
		<pubDate>Sun, 18 May 2008 23:43:06 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[Win32API]]></category>
		<category><![CDATA[アサーション]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=362</guid>
		<description><![CDATA[Windows プログラミングでアサーションを導入しようとしたら失禁するほどかっこいいダイアログが表示されました。


惚れたぜ。例外を捕まえなかったときは「ご不便をおかけして申し訳ありません」が表示されるというのに…
]]></description>
			<content:encoded><![CDATA[<p>Windows プログラミングでアサーションを導入しようとしたら失禁するほどかっこいいダイアログが表示されました。</p>
<p><span id="more-362"></span></p>
<p><a href="http://www.game-create.com/wp-content/uploads/2008/05/windows_assertion.gif" rel="lightbox"><img src="http://www.game-create.com/wp-content/uploads/2008/05/windows_assertion-300x233.gif" alt="Windows のアサートダイアログ" title="windows_assertion" width="300" height="233" class="alignnone size-medium wp-image-363" /></a></p>
<p>惚れたぜ。例外を捕まえなかったときは「ご不便をおかけして申し訳ありません」が表示されるというのに…</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/362/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

