////////////////////////////////////////////////////////////////////
/*

    KAB-studio.h


    (C)KAB-studio 1999 - 2001 ALL RIGHTS RESERVED.
        http://www.kab-studio.com/
        info@kab-studio.com

    送信日： 2001/07/16(Mon) No.116
    配信数： 3790 ( Mag2 + Pubzine )
＊    発行元： まぐまぐ ( URL: http://www.mag2.com/  ID: 0000012198 )
＊    発行元： Pubzine ( URL: http://www.pubzine.com/  ID: 590 )
*/
////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////
/*              ２００１年７月１３日（金）の更新                  */
http://www.kab-studio.com/

・Java メルマガ案内ページ登場！！
　有料メールマガジン「 Java で始めるオブジェクト指向プログラミング
(仮)」の案内ページを公開！　かぶスタ初の有料コンテンツです。
　でも購読登録や配信はまだ先。これはメルマガ登録用に公開したもので
す。待ち遠しい方、しばしお待ちを！
[ Java で始めるオブジェクト指向プログラミング(仮) ]
http://www.kab-studio.com/Programing/JavaOOP/index.html


////////////////////////////////////////////////////////////////////
/*                        チョー普通な日記                        */
http://www.kab-studio.com/nikki2/

2001/07/08 (Sun)
　市川のおばあちゃんの法事。母上とのんびり。あとはテレビ色々。やっぱ
田上様はいいなぁ……。

2001/07/09 (Mon)
　仮想化したりして拡張性持たせるの、自分向けでもいいのかな？　そして
進む Java メルマガ。結構書き進んでます。

2001/07/10 (Tue)
　お仕事結構大変。 std::vector 使おうとしたらエラー出まくるし、外部
関数の呼び出し部分がうまくいかないし。さらに泣き言(爆)。その影で、
Java メルマガの「捕らぬ狸の皮算用」モード。額だけはすごいよね……。

2001/07/11 (Wed)
　スタティックライブラリの問題はなんとか解決。ＢＳにちょっとはまる。
さらに進む Java メルマガ。それは Java のいい本がないからなのよー。

2001/07/12 (Thu)
　Java メルマガが８回目に突入。その分疲れが……。そして泣き言。仕事
向いてないよ(爆)。書くことないから朝起きてすることとか。フルバは面白
いねぇ。

2001/07/13 (Fri)
　お仕事プログラムにバグ発見(泣)。サービスって複雑や。そして Java メ
ルマガ「 Java で始めるオブジェクト指向プログラミング」を登録、しかし
同サブタイトルの本をそのあと発見(泣)。あと飲み会。

2001/07/14 (Sat)
　久々に横浜行って買い物。バンブーマットが大当たり。 Java メルマガは
結構期待されてる？　ほむぺで自分を鍛えよう。懐かしい BABEL 。そして
紙メディア VS メルマガ。


////////////////////////////////////////////////////////////////////
/*                         風雅、舞い                             */
http://www.kab-studio.com/Novel/Fuga/

■　第一章　予言と運命　−９−

　化学実験室。見渡せば古っぽい木製の棚の中にいくつものガラス製品が
入っている。ある物は中に薬物が入ってあり、またある物はフラスコやビー
カーなどであったりする。
　上の階の物理実験室などは新しいが、この部屋はまだ机も椅子も古びて傷
だらけのままだった。
　その背もたれのない直方体の椅子に青年が座り、舞は一番きれいに見える
ビーカーに水筒の水を入れていた。
「泉の水なのか？」
「そ、もう何年も前に汲んだのだけどね」
　その聖水も、数滴しか残っていなかった。あきらめて、舞は青年の方を向
く。
「助けてくれてありがと――それも二度も」
「気にしなくていい。それよりも今は、奴をどうするか考えるのが先決だ」
「そうね」
　青年は右手を差しだし、舞はそれを握り返した。
「俺の名は雅樹、朴雅樹（ほうのきまさき）だ」
「私は結白舞。よろしく」
　わずかの、間。
「……やっぱり憶えてないか……」
「え？」
　雅樹は握手を解き、その右手で左脇を指し示した。
「んでこいつが――多分見えないだろうけど――柊穂香（ひいらぎほのか）
だ」
　舞は、当然、きょとんとした。
「なんていうかな、俺のパートナーで、奥さんで、女神様ってとこだ。
えっ、何？」
　一瞬その左脇に耳を傾け、その舞には聞こえない言葉に聞き入ってから、
それを伝える。
「私からもよろしくお願いします、って伝えてくれって」
「穂香……さん」
　舞はまだきょとんとしたままだった。
「さて、作戦を練るとするか」
「私に考えがあるの」
　そう言って、舞は棚から硫酸や塩酸の瓶を取り出してきてテーブルに並べ
た。
「物騒なこと思いつくもんだな」
「さっき私の水の槍はあの獣の左肩を貫いた。でも、回復した」
「あいつのタフさは相当なもんだな」
「でも、絶対に回復しない物がある」
「脳か」
　意外とあっさり答えてしまって少しがっかりした。それほど頭がいいよう
には舞には見えなかったから。
「そのとおり」
「いや、穂香がそうだってな」
　また……。
　雅樹は人差し指をあげて、物知りそうに言う。
「脳には記憶や考え方が入っている、だからその部分が回復するってことは
記憶や考え方が変わるってことで、そりゃまずい、から脳は回復しない――
と、穂香は言ってる」
　何か、とても奇妙だ。まるで多重人格者のように――いや、本当の多重人
格者とは違うのかもしれないが――振る舞っている、そう見える。
「俺にゃ難しいことは解らないけどな」
　雅樹は確かに、頭が良さそうには――正確には知識があまり多そうには見
えなかった。だが、二度助けられたときの動きには十分な冷静さを感じさせ
た。取った行動も最善手と思えた。
「で、」
　と舞は継いだ。
「私はさっき力を使っている。あの犬の頭がもし良ければ、今度は確実にか
わしてくる」
「その動きを止めるためにそれを使うってわけだ。もちろん俺も手伝わせて
もらう――っと、なんだ？」
　また雅樹は脇を見て、話を聞き、会話をする。
「いや、俺はよく解んないけど……そうなのか？　いや、俺は十分だと思う
けどな……でもよ」
　その――おそらく――二人の会話は、舞をいらつかせた。あの犬がすぐに
でも来るかもしれない、そういう状況だというのに。
「あんまよく解んないが、それよりも確実な方法があるそうだ」
「確実な方法？」
　舞はいらついて訊き返した。
                                                              (続く)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
『このホームページって、本当に変だよね……』
「どうしたの？　いきなり」
『今週はプログラミングの有料メルマガ、来週は４コママンガ……』
「変って言うより、もったいないかも」
『もったいない？』
「プログラミングのページ見たくても、表紙が恥ずかしいって話多いよ」
『……それはあたしへのブジョク？』
「そそそそうじゃなくって、プログラミング一本に絞った方が」
『人気取れる？　でもお客さんは４コママンガの方が稼げそう』
「そりゃ面白かったらの話でしょ」
『うわきっつ……』
「……まぁ、火美ちゃんの４コマだったら面白いだろうけど」
『あ、なんか今日の水希ちゃんムカツク！』
「ええっ！？」
http://www.kab-studio.com/
_______________________________________________________________[KCM]


////////////////////////////////////////////////////////////////////
/*                       #pragma twice                            */
http://www.kab-studio.com/Programing/PragmaTwice/

　Version 6.16
気に掛ける範囲を狭める！

「前回、バグをコンパイルエラーで見つける例を紹介して、その最後で〈気
に掛ける範囲〉についてちょっと触れました」
『でもよく分かんなかった』
「そだね、〈気に掛ける範囲〉ってちょっと分かりにくいよね。そこで、変
数のスコープを復習しながら、ゆっくり見ていきましょう」
『ゆっくり、ねぇ』
「そう、大事なとこだしね。まずは〈グローバル変数〉から。おなじみ
CDebugDlg::OnButton1() の入ってるファイルの上の方」

// DebugDlg.cpp : インプリメンテーション ファイル
//

#include "stdafx.h"
#include "Debug.h"
#include "DebugDlg.h"

int g_i;    // ここに追加。

#ifdef _DEBUG
// 以下略

『そういえばこんなとこにも変数作れるんだよね』
「こんなとこに作る変数を〈グローバル変数〉って言います。グローバルっ
て名の通り、この g_i は DebugDlg.cpp の中ならどこからでも使えます」

void CDebugDlg::OnButton1() 
{
    g_i = 500;
    TRACE( "%d\n", g_i );
    // 500
}

『ってこれは CDebugDlg::OnButton1() で使ってるけど、他でも使える？』
「もちろん」

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
    g_i = 500;
    TRACE( "%d\n", g_i );
    // 500
    //{{AFX_DATA_INIT(CAboutDlg)
    //}}AFX_DATA_INIT
}

『げ、普段気にも留めてなかった謎の関数の中で……』
「これは CAboutDlg のだから、試す時はダイアログの左上のアイコンを右
クリックしてバージョン情報を表示しないといけないから」
『ホントだ、ちゃんと出た……』
「こんなふうに、グローバル変数は、作られたファイルの中で、作られた後
のどの関数からも使えます」
『なんか便利そう……』
「が！　その分注意しなきゃいけないんです」
『どゆこと？　それが〈気に掛ける範囲〉ってヤツ？』
「そうなんです。もしこういうふうに作ったら、 g_i を書き換えられる範
囲がファイル全体に広がります。ってことは、いつ書き換えられるか心配し
なきゃいけない範囲が広がるってこと」
『なんかイメージ掴みにくいけど……』
「もし火美ちゃんが、今の g_i をダイアログ用に使おうと思ってたとしま
す」
『思いました！』
「そのときついうっかり CAboutDlg のメンバ関数で値を書き換えちゃった
ら……」
『そりゃまずい。でも、ついうっかり？』
「もしくはわざと。さっき火美ちゃん〈便利そう〉って言ったでしょ」
『うん言った。そっか、 CAboutDlg で書き換えられるのが便利、って思っ
て使うことあるかも、ってこと？』
「そゆこと。今は関数も変数も少ないけど、ちょっと本格的なプログラムに
なるとどばっと増えて、その増えた分だけ気に掛ける変数も、気に掛ける範
囲も広がっちゃうんです。そしてそこに、バグが生まれる！」
『おお！　つまり書き間違えちゃったりしやすいってことね』
「だから、まずグローバル変数は作っちゃダメ！」
『ダメなんすか』
「そう、ダメ。絶対ダメ、って言ってもいいくらいダメ」
『なんか押し強いね、今日は……』
「まーでも難しい部分もあるんだけど……それが、グローバル変数の次に心
配する範囲が広いメンバ変数」
『メンバ変数って、クラスの中でしか使えない変数だよね』
「そうそう。計算機作ったりリストボックス使ったりしたときにやったけ
ど、もう一度ちゃんと見ておこうか。今度は DebugDlg.h の中身」

// DebugDlg.h : ヘッダー ファイル
//
// 略
class CDebugDlg : public CDialog
{
    int m_i;
// 以下略。

『って、前、たしか　Ver 6.04 ( No.104 ) で m_cIFStrm 作ったとこじゃ
ん。っつーかまだ残ってるし』
「じゃあそれ削除してこれに置き換えて。まあ、メンバ変数ってことで言え
ば m_i も m_cIFStrm も変わらないけどね」
『で、この m_i はメンバ変数になるんだから、メンバ関数ならどこからで
も使えるんだよね。たとえばいつもの CDebugDlg::OnButton1() で……』

void CDebugDlg::OnButton1() 
{
    m_i = 500;
    TRACE( "%d\n", m_i );
    // 500
}

『うんうん』
「でも、さっきの CAboutDlg::CAboutDlg() の中じゃ使えないんだよ」

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
    m_i = 500;    // コンパイルエラー。
    //{{AFX_DATA_INIT(CAboutDlg)
    //}}AFX_DATA_INIT
}

『そっか、 これは CDebugDlg クラスのメンバ関数じゃないから』
「そう。でもさ、これも CAboutDlg の中で使えないだけで、 CDebugDlg の
中からはどこからでも使えるから」
『さっき言ったみたいに、 CDebugDlg が大きくなったり、 m_i みたいなメ
ンバ変数が増えたら大変になっちゃうわけね』
「そゆこと。そうなってきたら、クラスを分割して分けます」
『……なにそれ』
「まー、ようするに新しく自分でクラスを作って、その中にメンバ変数やメ
ンバ関数を移すってこと。これはまた難しい話になってくるから、先に進ん
でからじっくりとね」
『いつものパターン……』
「で、メンバ変数よりも範囲が狭いのが、普通の、つまりローカル変数」

void CDebugDlg::OnButton1() 
{
    int i = 500;
    TRACE( "%d\n", i );
    // 500
}

『いつものヤツね。この i は他のメンバ関数からも呼べないわけね』
「そう。もし使いたい場合には、引数として渡せばいいから」
『なるほど』
「さて、ここからがある意味本題。たとえば文字列ポインタ」

void TraceChars( char *p_ch )
{
    TRACE( "%s\n", p_ch );    // ABCDE
}

void CDebugDlg::OnButton1() 
{
    char ch[] = "ABCDE";
    TraceChars( ch );
}

『文字列渡して出力してるね』
「これをうっかり書き換えて……」

void TraceChars( char *p_ch )
{
    TRACE( "%s\n", p_ch );    // ABCDE
    p_ch[0] = 'Z';
}

void CDebugDlg::OnButton1() 
{
    char ch[] = "ABCDE";
    TraceChars( ch );
    TRACE( "%s\n", ch );    // ZBCDE
}

『あ、 "ABCDE" の中身が書き変わっちゃった』
「もちろん、これが TraceChars() の機能ってことならいいんだけど、そう
じゃなくてこれは単なる間違い、 TraceChars() の中では書き換えないよう
にする、って場合には？」
『 const ポインタ！』
「そうでした」

void TraceChars( const char *const p_ch )
{
    p_ch[0] = 'Z';    // コンパイルエラー
}

『そうそう、こうすれば配列の中身を書き換えられないんだよね』
「そしてこれが、範囲を狭めるってこと」
『どゆこと？』
「 const じゃなかった場合、 CDebugDlg::OnButton1() の中の ch が書き
換えられる範囲は、 CDebugDlg::OnButton1() と TraceChars() の両方だっ
たわけ」
『そっか、それを const にすれば TraceChars() じゃ書き換えられなくな
るから書き換えられちゃう範囲が小さくなる、つまり気に掛ける範囲が狭ま
る！』
「そゆこと。こうやって狭く狭くしていけば、それだけ楽になるから」
『そういえば const char *const のふたつめの const は？　確か……これ
すると、ポインタが変わらなくなるんだよね。だから』

void TraceChars( const char *const p_ch )
{
    p_ch = NULL;    // コンパイルエラー
}

『なんだよね。でもこれって意味なくない？　これができても、外の ch に
は関係ないような気がするし……』
「もちろん外には関係ないよ。これは自分用」
『自分用？』
「自分で TraceChars() を作る時に p_ch のアドレスを変えないように。
ポインタじゃなくて int を引数に取る時とかも結構するよ」
『ふーん』
「で、今回のもすべて、バグをコンパイルエラーで拾う方法」
『そいや、範囲の違う変数を使うとコンパイルエラーになるもんね』
「というわけで、次はコンパイルエラーじゃない方法で拾ってみましょう」

/*
    Preview Next Story!
*/
『でも const int の引数って、使われてるの見たことないんだけど』
「使ってるの僕くらいかもしれないね」
『げ、そゆこと教える？』
「でも、いいことだとは思うでしょ？」
『まあそりゃぁ……』
「というわけで次回」
＜ Version 6.17 ASSERT の網 ＞
『につづく！』
「ま、使うか使わないかは火美ちゃんが決めて」
『じゃあ使わない』
「なにーっ！？」


////////////////////////////////////////////////////////////////////
/*              ２００１年７月２３日（月）の更新予定              */
http://www.kab-studio.com/

・三人合体ホットハーブ登場！！
　とうとう、とうとうかぶスタ初の４コママンガ「三人合体ホットハーブ」
が登場します！
　これまでは色々な面で不安ばかりだったために出し渋っていましたが、
やっぱ始めなきゃ始まらない！　ってことで見切り発車します。いや、でも
あんま期待しない方がいいかもよ（爆）。
[ 三人合体ホットハーブ ]
http://www.kab-studio.com/Comic/HotHerb/index.html


////////////////////////////////////////////////////////////////////
/*                          ご注意！！                            */

・このメールを返信しないでください。
・ご意見・ご希望・ご感想は[チョー普通な日記]よりお送りください。
http://www.kab-studio.com/nikki2/
・購読登録を解除したいときにはこのページで行なってください。
＊http://www.mag2.com/m/0000012198.htm
＊http://www.pubzine.com/detail.asp?id=000590
・解除は自分で行なってください。
・バックナンバーはこれらのページにあります。
http://backno.mag2.com/reader/Back?id=0000012198
http://www.kab-studio.com/Freeware/index.html#MailMagazine


////////////////////////////////////////////////////////////////////
/*
    KAB-studio.h
      Weekly Mail Magazine.
      Written by Kaburaya Seiden.
      http://www.kab-studio.com/Info/MailMagazine/

    (C)KAB-studio 1999 - 2001 ALL RIGHTS RESERVED.
        http://www.kab-studio.com/
        info@kab-studio.com
*/
////////////////////////////////////////////////////////////////////




