トップ «前の日記(2005-07-28) 最新 次の日記(2005-07-30)» 編集

ヨタの日々

2001|08|09|10|11|12|
2002|01|02|03|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|12|
2024|01|02|03|04|

2005-07-29

_

0530 起床。

ふに。

_ 朝飯

今日もメローンていうかなぜこんなにノルマのようにメロンがあるんだ...。

p7290002.jpg

_ 仕事

0640 へいしゃー。

昨日教わったのでセコム対策はばっちりだ。

_ 整然

以前 djb なプログラムのうち if が整然と並んでいて美しいなあなどと感心したのだけどどのプログラムだったかと探してみた。

djbdns( 和訳 djbdns 入門 ) だった。

たとえば dnsq.c の main() のところ。

 int main(int argc,char **argv)
 {
   uint16 u16;

   dns_random_init(seed);

   if (!*argv) usage();
   if (!*++argv) usage();
   if (!parsetype(*argv,type)) usage();

   if (!*++argv) usage();
   if (!dns_domain_fromdot(&q,*argv,str_len(*argv))) oops();

   if (!*++argv) usage();
   if (!stralloc_copys(&out,*argv)) oops();
   if (dns_ip4_qualify(&ip,&fqdn,&out) == -1) oops();
   if (ip.len >= 64) ip.len = 64;
   byte_zero(servers,64);
   byte_copy(servers,ip.len,ip.s);

   if (!stralloc_copys(&out,"")) oops();
   uint16_unpack_big(type,&u16);
   if (!stralloc_catulong0(&out,u16,0)) oops();
   if (!stralloc_cats(&out," ")) oops();
   if (!dns_domain_todot_cat(&out,q)) oops();
   if (!stralloc_cats(&out,":\n")) oops();

   if (resolve(q,type,servers) == -1) {
     if (!stralloc_cats(&out,error_str(errno))) oops();
     if (!stralloc_cats(&out,"\n")) oops();
   }
   else {
     if (!printpacket_cat(&out,tx.packet,tx.packetlen)) oops();
   }

   buffer_putflush(buffer_1,out.s,out.len);
   _exit(0);
 }

このように関数や機能の「 契約 」がしっかりしているとテストしやすいのでありますな。

「 契約 」とは、関数でいえば「 この引数を渡すとこの戻り値が返る 」ということを保証するもの。

プログラムのテストというのはこの「 契約 」についてテストするのであります。むしろ「 契約 」がないとテストできない。

「 契約 」については達人プログラマーに書いてあったのだだったか。

4894712741

_ 肉体 hero

自転車に乗って

帰宅すると

足がしびれた。

どうやら酸欠らしい。

帰宅時の疲労の原因は酸欠だったか。

_

カレーうどん。

p7290007.jpg

本日のツッコミ(全3件) [ツッコミを入れる]
_ さいき (2005-07-29 11:46)

それはそこのメロンがあるからw

_ みわ (2005-07-29 12:34)

「 そこにあるから 」って、マロリー病か笑

_ 矢道 (2005-07-29 15:07)

関数の先頭での引数や関数戻り時の戻り値が許容範囲内に収まってるか確認するのは普通なんじゃ?<br>これやっておかないと、いつセグメンテーションフォルトが起こるか判らないし。<br>まぁ、この判定文=単体検査項目とも言えるけど。