昨日のブログで、組み込みメッソドの「p」について書いたが、
新しいプログラミング言語を習得するためには
いろいろな構文や手順を 短いテストプログラムに書いて、
それを実際に実行させてみて
その結果を確かめてみるのが最も近道だ。
プログラミングの世界ではそのような場合に使う言葉として
「Hello World!」という言葉まで慣習化されているくらいだ。
ということで、Rubyにおける 表示関連の 組み込みメソッドについて調査・比較してみた。
ここでは、Rubyの表示関連のメソッドとして
「p」「puts」「putc」「print」「printf」を取り上げてみる。
それぞれのメッソドの仕様の詳細はリファレンスマニュアルに譲るとして、
ここでは大まかな違いについてまとめてみる。
- p
引数のオブジェクトを人間に読みやすい形で出力。
文字列はダブル・クォーテーションで囲まれて表示されるので、
末尾にスペースが入っているかどうかも確認できる。
配列やハッシュ(連想配列)もそのままの形で表示する。
- puts
引数のオブジェクトの値それぞれに改行をつけて出力。
配列の中身もそれぞれが改行される。
ハッシュ(連想配列)は繋がって表示される。
- putc
1文字を出力。引数は1個だけOK。
引数が数字なら、0 〜 255 の範囲の対応する文字を出力
引数が文字列なら、その先頭の1文字を出力。
- print
引数を順に出力。
オブジェクト間に改行は自動的には入らないので、必要なら挿入してやる必要がある。
- printf
C 言語の printf と同じように、format に従い引数を文字列に変換して出力
上記の 表示関連メソッドの違いが体験できる
テスト・スクリプトを作ってみた。
s = "Hello World!"
a = [123, 456, 789]
h = {'water' => 'wet', 'fire' => 'hot'}
puts "-- p --"
p s
p a
p h
puts "\n-- puts --"
puts s
puts a
puts h
puts "\n-- putc --"
putc s
# putc a エラー `putc': can't convert Array into Integer
# putc h エラー `putc': can't convert Hash into Integer
puts "\n\n-- print --"
print s
print a
print h
puts "\n\n-- printf --"
printf "This is %s\n", s
printf "%s\n", a
printf "%s\n", h
これを実行してみると、
-- p --
"Hello World!"
[123, 456, 789]
{"water"=>"wet", "fire"=>"hot"}
-- puts --
Hello World!
123
456
789
waterwetfirehot
-- putc --
H
-- print --
Hello World!123456789waterwetfirehot
-- printf --
This is Hello World!
123456789
waterwetfirehot
となる。
【参考リンク】
カテゴリー:
Ruby
22:15
| コメント (0)
| トラックバック (0)
Rubyのサンプル・ソースコード を読んでいたりすると
途中に「{|v| p v}」
のような表現があったりする。
この表現の全体の意味については、今日は触れないが、
通常、プログラム中に「p」という 一文字の表記があると、
名前が一文字の変数かな、と思ってしまうのではないかな。
しかしRubyの場合、これが組み込み関数(メソッド)だったりする。
Ruby リファレンスマニュアル「p」
によると、このメッソド「p」の定義は、
p の引数として オブジェクトをいくつか与えると、
与えられたオブジェクトを人間に読みやすい形で出力する、
というもの。
ということで、前述の「{|v| p v}」のうち、
「p v」というところは、「v」という名前の変数の内容を
「p」メッソドを使って表示させる、ということ。
ちなみに、「p」というのは埋め込みメッソドの名称ではあるが、
別にRubyの「予約語」になっているわけではないので、
「p」という名前の変数を作成することができてしまったりもする。
その辺も踏まえて、簡単な例題プログラムを書いてみる。
p="Hello World!"
p p
p = ["abc", 456, 789]
p p
p p[1]
p = {'water' => 'wet', 'fire' => 'hot'}
p p
p p['water']
これを走らせてみた結果は、
"Hello World!"
["abc", 456, 789]
456
{"water"=>"wet", "fire"=>"hot"}
"wet"
となる。
このように、Rubyでは
メッソドの「p」と 変数名の「p」とをちゃんと識別できるわけだが、
「p」という名前の変数を作ってしまうと、
人間の方が混乱してしまうので、やめておいた方がよさそうだ。
【参考リンク】
カテゴリー:
Ruby
22:45
| コメント (0)
| トラックバック (0)
前回のブログで、Rubyのコメントについて書いたが、その続き。
Ruby のコメントは、基本的に「# (シャープ) 」記号から行末までをコメントしているが、
例外として、「文字列中や数値リテラル `?#' 以外」となっている。
始めの「文字列中以外」というのは
ダブルクォート「"」またはシングルクォート「'」で囲まれた文字列中にある
「# (シャープ) 」記号は コメント開始の印とはみなさない、ということで理解できるし、
その他の言語でもほぼ同じである。
一方、その後の「数値リテラル `?#' 以外」というのは一体何を表しているのだろうか?
調べてみると Rubyでは、数値リテラルの記述方法のひとつとして
「?a」のような書き方で「文字aのコード」を表すことができる。
つまりこの場合、アルファベットの小文字「a」のアスキー(ASCII)コードを十進数表示した「97」となる。
ということで Rubyにおいて「?#」は「# (シャープ) 」記号のアスキー(ASCII)コードを表すことになる。
実際にテストしてみると、
p ?#
というRubyスクリプトを実行してみると
35
となる。
この「35」とは、「# (シャープ)」のアスキー(ASCII)コードを十進数表示した値である。
【参考リンク】
カテゴリー:
Ruby
22:20
| コメント (0)
| トラックバック (0)
プログラミング言語の習得の際に
私がまずチェックするのがコメントの書き方。
さて、Ruby でのコメントの記述方法は?
「
Ruby リファレンスマニュアル「コメント」」
によると、
スクリプト言語の習慣にならい、文字列中や数値リテラル `?#' 以外の #から行末までをコメントと見なします。
とある。
プログラミング言語のコメントは
大きく「行コメント」と「ブロックコメント」に分けられるが、
Ruby の場合は、Perl や Python 同様に 「# (シャープ) 」による「行コメント」ということになる。
「行コメント」としては他に
C++やJavaでの「//」、
BASICでの「REM」や「'(アポストロフィ)」
等がある。
また、「ブロックコメント」としては
HTMLでの「<!-- -->」、
C、C++、Java、JavaScript、CSSでの「/* */」
最近の言語の傾向として
「行コメント」と「ブロックコメント」の両方をサポートするようになってきている。
では、Rubyは というと
「コメント」とは称していないが「埋め込みドキュメント」という機能がある。
これは、コメントを開始する行に「=begin」を、
コメントを終了する行に「=end」を記述することにより
その間にのテキストを埋め込みドキュメントとすることができる。
コメントついでに「 (?# ) 」
は、正規表現中でのコメントで、括弧の中の任意の文字列は無視されることになっている。
【参考リンク】
カテゴリー:
Ruby
22:47
| コメント (0)
| トラックバック (0)
「Google Japan Open House」というイベントが
マウンテン・ビュー(Mountain View)のグーグル(Google)本社で開かれた。
普段、なかなか社内に入れないグーグルでのイベントということで、
めったに見かけないシリコンバレーの要人も集まって来ていた。
例えば、最近シリコンバレーに来られた「はてな」の近藤社長の
お顔も見受けられた。
イベントのメインはテクニカル・プレゼンテーション。
内容は、グーグルが社内で使っている「Google File System(GFS)」についてとか、
グーグルの日本向けのサービスの紹介とかであった。
プレゼンしたのはグーグルの担当日本人スタッフだったが、
プレゼンは全て英語であった。
テクニカル・プレゼンテーションの後、質疑応答や
グーグル・スタッフとのネットワーキングと進んだ。
その際、いろいろグーグル関係者に話を伺ってみると、
さすがのグーグルでも優秀な日本人エンジニアが足りていない、とのことだった。
結局のところ、このイベントは
人材募集のためプロモーションが目的だったようだ。
カテゴリー:
シリコンバレー
22:12
| コメント (0)
| トラックバック (0)
ある事柄を理解しようとした場合に、
それとは まったく反対の事柄について研究すると
もともと理解したかった事柄が
よりよく理解できる場合がある。
このことを昨日のブログでまとめてみた
「7つの習慣」にあてはめてみる。
つまり「7つの習慣」を理解するために
それとは まったく反対の「7つの習慣」を探ってみるわけだ。
これについては
「
7つの習慣 — 成功には原則があった!」の著者
スティーブン・R・コヴィー 氏の息子の
ショーン・コヴィー 氏の著作
「
7つの習慣 ティーンズ」
で 「非効果的な人の7つの習慣」と呼ばれるものが紹介されている。
- 反応的になる(自分を疑い、他人に責任転嫁する。)
- はっきりした目的を持たずに活動する。
- 緊急事項を優先する。
- Win-Loseを考える。
- まず相手に自分を理解してもらう。
- 勝てないなら、妥協する。
- 変化を恐れ、改善を先送りする。
直接 「7つの習慣」を理解しようとするよりも、
この「非効果的な人の7つの習慣」を読んでいる方が
なんとなく シックリとしてしまう。
それはおそらく、こっちの方が
今の自分に重なる部分が多いからだと思う。
カテゴリー:
7つの習慣
22:06
| コメント (0)
| トラックバック (0)
「7つの習慣」シリーズについては、これから少しずつ内容について掘り下げて行こうと思っているが、
ここでもう一度、習慣の一つひとつをクリアにしておきたい。
ちょうど「
7つの習慣 名言集」
の392ページに ---「7つの習慣」とは---
ということで概要がまとめてあるので、
ここではこれを引用させていただく。
- 第一の習慣 主体性を発揮する
「自らの行動を選択する習慣」とも呼ばれ、
自分の行動や態度に対しては自分で責任を負うという習慣である。
率先力を示し、目的を達成するために必要な行動を起こすことである。
- 第二の習慣 目的を持って始める
「自らを目的地に導いていく習慣」である。
現状を理解し、次の行動を決定する指標として、
自らがめざす目的地(ビジョン、目標、ミッション)を明確にすることである。
- 第三の習慣 重要事項を優先する
「自己を管理する習慣」であり、時間や出来事をコントロールじてゆく習慣である。
自己管理をきちんと行い、本当に重要な事柄を優先して計画を立て、
実行に移すことである。
- 第四の習慣 WinWinを考える
「相手に対してリーダーシップを発揮していく習慣」である。
これは相互利益を求めようとする行為であり、
双方にとってプラスになる代案を探し出し、もしそれが見つからないときは
取引き中止を決意することである。
- 第五の習慣 理解してから理解される
「感情移入によって相手とのコミュニケーションを図る習慣」である。
相手を理解することで、信頼を築いていくことである。
- 第六の習慣 相乗効果を発揮する
「協力関係や良いチームワークを生み出していく習慣」である。
互いの相違点を尊重し、相手に対して敬意を払いつつ
それぞれの主張を混合・合体させていくことにより、
「新しいなにか」を生み出すことである。
- 第七の習慣 刃を研ぐ
「自己を再新再生(活性化)する習慣」である。
自分の肉体、精神、知性、および人間関係における感情面などをみがくことにより、
切れ味をよくし、それぞれの能力を高めることである。
カテゴリー:
7つの習慣
22:41
| コメント (0)
| トラックバック (0)