プチコンで遊ぼう! (はてなブログ版)

任天堂3DSのプチコンで遊ぼう! [twitter:@eida_s]

はてなダイアリーから移行しました。 はてなダイアリーのURLを開いても自動的にこちらにリダイレクトされますのでご了承ください。

SMILE BASIC 小技(6)

INC,SHIFT,UNSHIFT,PUSH,POPは文字列にも使うことができる。

VAR A$="ABC",C$

INC A$,"DEF"   '文字列の最後に追加
PRINT A$       'ABCDEF
C$=SHIFT(A$)   '文字列の先頭の一文字を取る
PRINT C$,A$    'A   BCDEF
UNSHIFT A$,"Z" '文字列の先頭に文字を付け加える
PRINT A$       'ZBCDEF
PUSH A$,"G"    '文字列の最後に文字を加える
PRINT A$       'ZBCDEFG
C$=POP(A$)     '文字列の最後の一文字を取る
PRINT C$,A$    'G   ZBCDEF

DECは文字列には使えない模様。(使い方を知ってたら教えてください。)

なお、これらの命令・関数は、文字列を参照型として扱う。
参照型とは何かをここで詳しく書くことはできないが、
概ね以下のように思っていただければよい。

通常、
VAR A$="ABC"
A$=A$+"D"
のようにすると、"ABC"とあったメモリの場所とは別の場所に”ABCD"という文字列が作成され、A$はそこを指すようになる。
これが普通の文字列の動作。

しかし、上記の参照型の命令(例えばINC)の場合、"ABC"とあったメモリの位置に"D"が追加されて、結果として"ABCD"になる。

これはPRINT命令でA$を表示した結果は同じなので、まったく同じことのようだが、別の変数に参照を代入した場合に違いが出てくる。

VAR A$="ABC"
VAR B$=A$
A$=A$+"D"
PRINT A$  'ABCD
PRINT B$  'ABC
VAR A$="ABC"
VAR B$=A$
INC A$,"D"
PRINT A$  'ABCD
PRINT B$  'ABCD

ここで詳しく説明できないので、詳細は別項を立てる。