March 27, 2005

自由自在 Squeak プログラミング:第6章 基本クラスライブラリ探検─その2(2)

Squeak Logo
<ストリームクラス群>:ストリームは一続きのデータを処理するもので、必ずなんらかのコレクション(クラスのインスタンス)を元に生成するが、殆どの場合は String を扱う時に利用される。

基本(内部)ストリーム:メモリ上のみに存在するストリーム
ReadStream:読み込み専用のストリーム。「on:」クラスメソッドの引数にコレクションクラス(Array, String クラスなど)のインスタンスを渡して生成できる。
 例:rs := ReadStream on: #(a b c d). rs inspect. "do it"
または、コレクションクラス(Array, String クラスなど)のインスタンスに、「readStream」メッセージを送る事でも、生成できる。
 例:rs := #(a b c d) readStream. "inspect it" rs := 'abcd' readStream. "inspect it"
next, next: メッセージ:ストリームに「next」メソッドを送る事で、要素を順に取り出せる。「next:」メッセージで引数分だけ取り出す事もできる。
※:コレクションの最後の要素を超えると「nil(不定)」が返って来る。
 例:rs := '12345' readStream. rs next. "print it" rs next: 4. "print it" rs next. "print it"
定番の書き方:「whileFalse:」メソッドを使い、ストリームに「atEnd」メソッドを送って判定する。
 例:rs := 'Hello Squeak!' readStream. [rs atEnd] whileFalse: [Transcript space; show: rs next]. "do it"
upToEnd メッセージ:next 等で読み込み後、最後まで全て取り出す時に使用する。
 例:rs := 'Hello Squeak!' readStream. rs next:6. rs upToEnd. "print it"
contents メッセージ:next 等で読み込んだ位置に関係なく、最初から最後まで全て取り出す時に使用する。
 例:rs := 'Hello Squeak!' readStream. rs next:6. rs contents. "print it"
position, position: , resetメッセージ:現在の読み取り位置をpositionで確認、positon: で読み取り位置を先頭からの絶対値で設定する事ができる。position: の引数がストリームの要素を超える場合はエラー。 resetでpositionの値をゼロに戻せる。
 例:rs := 'Hello Squeak!' readStream. rs next:6. rs position. "print it" rs position:12. rs next. "print it" rs reset. rs position. "print it"
skip: メッセージ:現在の読み取り位置から相対的に読み取り位置を指定できる。負の値で戻る事もできる。ストリームの要素数を超えたり、ゼロ以下になるとエラー。
 例:rs := 'Hello Squeak!' readStream. rs next:6. rs skip:6. rs next. "print it" rs skip:-6. rs next. "print it"
upTo: メッセージ:引数の要素までを取り出す。positionの値は、一致した要素になる。引数と一致する要素が無ければ最後まで取り出す。
 例:rs := 'Hello Squeak!' readStream. rs upTo:(Character space). "print it" rs upTo:(Character space). "print it"
skipTo: メッセージ:引数の要素までpositionを移動するだけ。upToの様に、要素を返さない。
 例:rs := 'Hello Squeak!' readStream. rs skipTo:(Character space). rs position. "print it"
peek メッセージ:nextメッセージと同じく、次の要素を取り出すが、positionを変化させない。
 例:rs := 'Hello Squeak!' readStream. rs next. rs position. "print it" rs peek. "print it" rs position. "print it"

WriteStream:書き込み専用のストリーム。
on: メッセージ:on: クラスメソッドの引数に、書き込むおおよその要素数を持ったコレクションクラスのインスタンスを指定して、ストリームを作成する。
最初に指定した要素数を超える要素を書き込んだ場合でも、自動で拡張されるので要素数ゼロでも構わないが、拡張作業が必要な為、その分動作が遅くなる。
 例:要素数ゼロで作成:WriteStream on: ''. "inspect it"
 例:要素数を指定して作成:WriteStream on: (Array new:10). "inspect it"
with: メッセージ:on: メッセージと同じく、引数に渡したコレクションでストリームを作成するが、on: ではストリームに要素を追加すると上書きされるのに対し、with: で作成したストリームは最初に渡したコレクションを保持して、その後ろに要素が追加される。
 on: の例:WriteStream on: (Array new:5). "inspect it"
 with: の例:WriteStream on: (Array new:5). "inspect it"
on: と with: で作成したストリームでは、要素が追加される位置を示す position の値が違っている事が分かる。また、on: に渡した引数が意味の有るコレクションでも、取り出す事ができない様になっている(上書きされてしまうから?)。
 on: の例:(WriteStream on: 'Hello Squeak') contents. "print it"
 with: の例:(WriteStream on: 'Hello Squeak') contents. "print it"
nextPut: メッセージ:引数に要素を一つ指定して、ストリームに追加する事ができる。
 例:ws := WriteStream on: ''. ws nextPut: $a. ws nextPut: Character space. ws nextPut: $A. ws contents. "print it"
nextPutAll: メッセージ:引数にコレクション(のインスタンス)を指定して、ストリームに追加する事ができる。
 例:ws := WriteStream on: ''. ws nextPutAll: 'Hello'. ws nextPut: Character space. ws nextPutAll: 'Squeak!'. ws contents. "print it"


17:18:14 | 3k1 | comments(0) | TrackBacks

自由自在 Squeak プログラミング:第6章 基本クラスライブラリ探検─その2(1)

Squeak Logo
文字列クラス群:String, Character
<String>:StringクラスはCollectionクラスのサブクラスの為、イテレート系プロトコルが使用できる。Stringクラスのインスタンスは、シングルクォーテーションで囲んだリテラル「'文字列'」で作成できる。
文字列の連結:「,」カンマメッセージで文字列を連結できる。 例:'abcdef' ,'123456'. "print it"
※:文字(Character)はCollectionクラスのサブクラスではないので、カンマメッセージで連結できない。asStringメッセージでキャストする必要が有る。
文字列の比較:「=」で文字列同士を比較できる。 アルファベットの大文字小文字を区別しないで比較する「sameAs:」メッセージも有る。 例:'Squeak' = 'squeak'. "print it" 'Squeak' sameAs:'squeak'. "print it"
文字列のマッチ:「match:」メッセージで文字列の部分マッチを判断できる。マッチするとtrue、マッチしないとfalseを返す。 判断の際、大文字小文字は区別されず、「*」が0文字以上の任意の文字列、「#」が任意の1文字になる。 例:'h#llo sque*' match:'Hello Squeak!'. "print it"
文字列の検索:「(検索される文字列) findString:(検索する文字列) startingAt:(検索開始位置)」メッセージが使える(大文字小文字は区別される)。 例:'Hello Squeak' findString:'Squeak' startingAt:5. "print it"
区切り文字で分割:「(文字列) findToTokens:'(区切り文字)'」メッセージが使える。 例:'Hello Squeak' findTokens:$e. "print it" 'Hello/Squeak:!' findTokens:'/:'. "print it"
文字列の置換:「(文字列) copyReplaceAll:(検索文字列) with:(置換文字列)」メッセージが使える。戻り値は置換された文字列のインスタンスで、オリジナルのインスタンスは変更されない。 例:'Hello world!' copyReplaceAll:'world' with:'Squeak'. "print it"

<Character>:リテラル「$(文字)」でインスタンスを作成できる。 Characterクラスのクラスメソッドカテゴリ「accessing untypeable characters」に、リテラルでは生成しにくいスペースやタブを生成するメッセージが有る。 例:Character space inspect. "do it"
アスキーコードから文字を生成:クラスメソッド「value:」メッセージにアスキーコードを指定して、文字を生成できる。 例:Character value:65. "print it" Character value:(65+32). "print it"
文字からアスキーコードを得る:インスタンスメソッド「asciiValue」メッセージを使う。 例:$z asciiValue. "print it"
文字列への変換:オブジェクトを文字列に変換するには、「asString」メッセージを使用する。 例:12345 asString. "inspect it" Time now asString. "inspect it"
Squeakの多言語対応:MultiString (AbstractStringのサブクラス) と MultiCharacter (Characterのサブクラス) が有る。
これらのインスタンスは、日本語などのマルチバイト文字列や文字を作成した時に作られる。 例:'日本語' "inspect it" '日本語' last. "inspect it"


13:44:01 | 3k1 | comments(0) | TrackBacks

March 26, 2005

Firefox 1.0.2 for Mac OS X 日本語版ダウンロード

Firefox Logo
Firefox 1.0.2 for Mac OS X - 日本語版 (8.7 MB) がダウンロード可能になっていました。

1.0.1から間を置かずに公開されたので、なにか緊急の対応がされているのかも。


18:10:45 | 3k1 | comments(0) | TrackBacks

March 20, 2005

フジテレビ:おもしろおかしい

なにかと話題ですが、今年の株主総会は他局のカメラが入って来るはずなので、こんなことにはならない…んでしょう。

他社の起こした事件はおもしろおかしく報道できるのに、自社のアナ事件は扱わないが、同乗者のアナのゴールインは扱うんですね。


14:00:55 | 3k1 | comments(0) | TrackBacks

2005年4月13日 問題

Teikoku Logo
INTERNET Watchの記事によると、Windows XP の SP2 への遮断ツールの有効期限が4月12日で切れるらしい。
翌4月13日はおそらく、XPを導入している企業に取って、悪夢の一日になるだろう。
パソコンの保守・管理をされている皆さんの無事をお祈り致します。


13:23:31 | 3k1 | comments(0) | TrackBacks