やる夫で学ぶプログラミング その1.2
/ ̄ ̄\
/ _ノ \
| ( ●)(●)
. | (__人__) よし、じゃあ続きを始めようか。
| ` ⌒ノ
. ヽ }
ヽ ノ
/ く \
| \ \
| |ヽ、二⌒)
/ ̄ ̄ ̄\
/─ ─ \
/ (●) (●) \ 宜しくお願いします先生。
| (__人__) |
\ ` ⌒´ /
▼/ ̄  ̄ ̄)____
〃(⊥) ´/ / ̄/ / 〃 ⌒i
__i /⌒\./ / し' __|;;;;;;;;;;i
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
| 3.「入出力」 |
|_________|
∧∧ ||
( ゚д゚)||
/ づΦ
/ ̄ ̄\
/ _ノ \
| ( ●)(●) さっきさりげなくprintとか言うコマンドを
. | (__人__) 使っていたのは覚えているだろ?
| ` ⌒ノ
. ヽ } あれが「出力」だ。
ヽ ノ
/ く \
| \ \
| |ヽ、二⌒)
____
/ \
/ ─ ─\
/ (●) (●) \ そういえばそんなのもあったっスね。
| (__人__) |
/ ∩ノ ⊃ /
( \ / _ノ | |
.\ " /__| |
\ /___ /
/ ̄ ̄\
/ _ノ \
| ( ●)(●) 出力するといっても「出力先」が無いと
. | (__人__) いけないわけだが・・・。
| ` ⌒ノ
. ヽ } さて、どこに出力されていたでしょう?
ヽ ノ
/ く \
| \ \
| |ヽ、二⌒)
___ ━┓
/ ―\ ┏┛
/ノ (●)\ ・
. | (●) ⌒)\ ん?それは画面じゃないのかお?
. | (__ノ ̄ |
\ /
\ _ノ
/´ `\
| |
| |
/ ̄ ̄\
/ _ノ \
| ( ●)(●) 実は「画面」という出力先は無い。
. | (__人__)
| ` ⌒ノ その代り「標準出力」と「標準エラー出力」という
. ヽ } 2つの出力先が用意されている。
ヽ ノ
/ く \ この2つに出力されたものは、特に何もしなければ
| \ \ コンソールの画面に表示されるという仕組みに
| |ヽ、二⌒) なっているんだ。
____
/ \
/ \ ,_\
/ (●)゛ (●) \ それは結局「画面」に出力しているのとは
| ∪ (__人__) | 違うのかお?
/ ∩ノ ⊃ /
( \ / _ノ | |
.\ " /__| |
\ /___ /
/ ̄ ̄\
/ _ノ \
| ( ●)(●) 「何もしなければ」のあたりがポイントだな。
. | (__人__)
| ` ⌒ノ 出力先をコンソール画面からファイルに
. ヽ } 切り替えたり、他のプログラムを起動して
ヽ ノ 入力として流し込むことができるんだ。
/ く \
| \ \ 流し込まれた側は「標準入力」から
| |ヽ、二⌒) そのデータを受け取ることができるぞ。
____
/ \
/ ─ ─\
/ (●) (●) \ 具体的にはどうするんだお?
| (__人__) |
/ ∩ノ ⊃ /
( \ / _ノ | |
.\ " /__| |
\ /___ /
/ ̄ ̄\
/ _ノ \
| ( ●)(●) 入出力操作関連のコマンドは言語によって
. | (__人__) まちまちなので、今回はperlでサンプルプログラムを
| ` ⌒ノ 組んでみるぞ。
. ヽ }
ヽ ノ
/ く \
| \ \
| |ヽ、二⌒)
【output.pl】
print 9999;
【input.pl】
print
【実行方法】
perl output.pl | perl input.pl
【実行結果】
19998
/ ̄ ̄\
/ _ノ \
| ( ●)(●) このサンプルプログラムでは、まず
. | (__人__) output.pl が実行され、9999 という文字列が
| ` ⌒ノ 標準出力に出力される。
. ヽ }
ヽ ノ 縦棒みたいな記号 | は「パイプ」と言って、
/ く \ 標準出力を次のプログラムの標準入力へ
| \ \ 流し込むという意味だ。
| |ヽ、二⌒)
/ ̄ ̄\
/ _ノ \ そして input.pl の STDIN ってのが
| ( ●)(●) 「標準入力」を意味している。
. | (__人__)
| ` ⌒ノ タグ括弧 < > で囲むと、「入力から読み出し」
. ヽ } という意味になるので、標準入力からの
ヽ ノ 読み出し処理を行うわけだ。
/ く \
| \ \ 読み出された 9999 という文字列に * 2 が
| |ヽ、二⌒) 実行されて、19998 が出力されるわけだ。
※注1 「タグ括弧」という呼び名は説明の為に便宜上つけたものであり、
一般的な呼称ではありません。
※注2:perlでは文字列に対して掛け算を行うと、文字列を自動的に
数値に変換して計算処理を行います。
/ ̄ ̄\ ちなみに標準出力は STDOUT、
/ _ノ \ 標準エラー出力は STDERR という
| ( ⌒)(⌒) 名前がついているぞ。
. | (__人__)
| ` ⌒ノ さらに print 9999; というのは、実は
. ヽ } print STDOUT 9999; と書いても
ヽ ノ 同じ意味になるぞ。
/ く \
| \ \
| |ヽ、二⌒)
____
/ \
/ ─ ─\
/ (●) (●) \ ところで「標準エラー出力」は
| (__人__) | 何につかうんだお?
/ ∩ノ ⊃ /
( \ / _ノ | |
.\ " /__| |
\ /___ /
/ ̄ ̄\
/ _ノ \
| ( ●)(●) その名の通り、エラーメッセージ出力用に使う。
. | (__人__) ただしそのように使うという「礼儀」程度のものだ。
| ` ⌒ノ
. ヽ } 実際の用途についてはプログラムを書く側に
ヽ ノ 委ねられているから、ぶっちゃけどう使おうと勝手だ。
/ く \
| \ \
| |ヽ、二⌒)
/ ̄ ̄ ̄ \
/ ― ― \ じゃあ標準出力と標準エラー出力を
/ (●) (●) \ 逆につかってもいいってことかお?
| (__人__) |
\ mj |⌒´ /
〈__ノ
ノ ノ
/ ̄ ̄\
/ _ノ \
| ( ⌒)(⌒) それはお前だけ、
. | (__人__) 「はい」と「いいえ」の意味を
| ` ⌒ノ 逆転するようなものだ。
. ヽ }
ヽ ノ じゃあ早速、お前だけ今年いっぱい
/ く \ 「はい」と「いいえ」を入れ替えて
| \ \ 使ってもらうけど、いいな?
| |ヽ、二⌒)
____
/ノ ヽ、_\
/( ○)}liil{(○)\ いいえ!いや、はい!
/ (__人__) \ いや、勘弁して下さい!!
| ヽ |!!il|!|!l| / |
\ |ェェェェ| /
/ ̄ ̄\
/ _ノ \ とまあ、「礼儀」といえど、明確な理由が
| ( ⌒)(⌒) 無い限り守っておくことに越したことは無い
. | (__人__) というわけだ。
| ` ⌒ノ
. ヽ } プログラミングの世界はこういう「礼儀」が
ヽ ノ 沢山あるが、意味は分からなくても
/ く \ とりあえず従っておいたほうが良いと
| \ \ いうことをだけは覚えておこうな。
| |ヽ、二⌒)
【まとめ】
・「標準出力(STDOUT)」 ... 特に何もしなければここに出力される。
・「標準エラー出力(STDERR)」 ... エラー等を出力したい場合に使う出力先。
・「標準入力(STDIN)」 ... パイプ等で流しこまれた入力データをここから得られる。
/ ̄ ̄\
/ _ノ \
| ( ●)(●) さて、これで入出力については教えたから
. | (__人__) 次回からはこれらをバリバリ使ってもらうぞ。
| ` ⌒ノ
. ヽ } プログラムは入力を処理して、
ヽ ノ その結果を出力してなんぼだからな。
/ く \
| \ \
| |ヽ、二⌒)
____
/_ノ ヽ_\
/( ●) ( ●)\ 。oO( 今回は結構簡単だったお。
/ ::::::⌒(__人__)⌒:::::\ この調子ならまだまだ楽勝だお。 )
|  ̄ |
\ /
/ ̄ ̄\
/ _ノ \ ニコッ
| ( ⌒)(⌒)
. | (__人__) まだ一周目だってことを忘れるなよ。
| ` ⌒ノ
. ヽ }
ヽ ノ
/ く \
| \ \
| |ヽ、二⌒)