irbでサクッと、さらっとRubyを触ってみるのが目的の
このカテゴリで、
ここからが本題といっても良いでしょう。

さて、Rubyは全てがオブジェクトでできていますが、
オブジェクトの役割ごとに総称がありました。

それがクラスとメソッドです。
クラスは広い意味で、役割をまとまりで捉える時のもので、
メソッドは道具や手法です。

例えば、p、 puts、 print は、結果を表示するための道具
(組み込みメソッド)でしたね。

同じように、何かを表現するための道具がRubyには揃っています。

学校や専門校で何かを学ぶ時、
解き方、組み方、書き方、作り方というのは、
カリキュラム通りに行い、結果も予定されたものを
完成品として作り上げることを良しとされます。

こういう傾向は仕方がないことだと思います。
お金を払って学ぶところというものは、
「等しくできるように教える」というのが当たり前ですから。

けれども、間違えてはいけないのは、
そういったものは、教える側の都合に沿ったものなので、
当然実戦向きとは言えません。

そう、実戦ではそこで培った知識が活きるだけで、
結果まで同じになることはないし、同じにする必要もないんです。

じゃぁ、学校なんて意味ないんじゃないの?
というのも違います。
そこで培った知識は、活きるんですから。

道具の使い方を知れば、一流になれるでしょうか?
答えは否です。
学ぶ場でのカリキュラムは、
無数にある経験値のたった数例なので、
そこからもっとたくさんの使い方を実地で学ぶことが大切なんですね。


私は育った環境のおかげで、大学へは行っていません。
自分の持っているものは、3割が独学で、7割が仕事で得たものです。

今はバックアップをメインに仕事をしていますが、
同僚は有名大卒の優秀な方々ばかりです。
おそらく高卒は私だけではないでしょうか。

けれども、職場ではむしろ頼られる存在と思っていただいているようで、
今の職場で、私を小馬鹿にするような人はほとんどおらず、
そういうところも、優秀な人は違うのかも知れないと、
ありがたく思っているところです。

今だからこそ思うのが、学校や専門校に慣れた人というのは、
最短の行程で、正解を求め、安定を好むが故に、
うまくいかないことを思い悩む人が多く、
私のようなものは、常に正しい行程も正しい正解もわからないので、
模索がやめられない、という傾向があるように思います。

どっちが正解か?という答えはナンセンスです。

常に正しい答えなんて、どこにもありません。

今には今の正解があるだけです。

やる気があって、うまくいかないことを思い悩む人というのは、
ほんの少し見方を変えることで、
今の正解をつかめることが多いものです。

社会では、
ほんの数点の修正のために、何時間も時間を費やすなら、
応急処置で、目の前の課題を乗り切り、
その後正しい修正をするという方法で納期に間に合わせれば良いことも、
往々にしてあります。
当然ですが、極論ではなく、ケースバイケースですが、
大切なのは、問題の切り分けと、優先順位の見極めです。

社会で必要なことは、その時必要な結果に着地させることです。
書類としての体裁を整え、相手に提出する。
プレゼンテーション資料を完成させ、プレゼンテーションに挑めること。
クライアントとの交渉に必要な資料を集め、戦略を持って挑むこと。
などのことです。

「応急処置で、目の前の課題を乗り切る」というのは、
誤魔化すといういう意味ではなく、
パソコンで作る資料を、
「ソフトウェアの正しい使い方」と思い込んでいる方法で作る必要はない
ということです。

リミットが迫った中、「ソフトウェアの正しい使い方」で追加や修正を行うと、
2〜3時間かかることでも、
ひと昔前、パソコンがない時代に手動でやっていた、
応急処置で数分で解決できることも少なくない。
そういう、一見正攻法とは思えない方法も今のソフトウェアなら
まるでローカルな方法での応用をいくらでも効かせられる。

文字や文章の訂正なら、
修正テープを使うように、パッチを貼るように。
画像の変更なら、元ある画像の上に差し替えを載せてしまって、
その状態で全体をグループ化するか、画像化する。
そういった小手先の小狡さを持つべきだと、
いつも思っています。
一般の日に大切なのは、目的を達成することで、
ソフトを使いこなせることではないんですから。

日々の会話で、私が一番多く接するのが、
「今どうにかしたい。どうすればいい?」という問いかけと、
「最終的に自分がどうしたいのか、結果として作りたいものは何かを言って」
という応えです。

望む結果のカタチがわかれば、示せる解決法や、
自分が手助けするべきかどうか、
何をサポートするのが有効かが判断できるからです。

同じように、ダメなものもあって、
相談の段階で良い結果が期待できないものには
アドバイスをせず、そこそこのサポートでお茶お濁すこともあります。

現状、良いことも、うまくいかなかったことも、結果が伴っているし、
参考書には乗らないコツなども出し惜しみなく教えるので、
短期間にレベルアップする人が一定数おられます。
そういう人の成長を見ると、やっぱりそれは楽しいです。

また、そういう人たちには、
「自信がない、どうしたらいい?」などというビビリ精神を持つことは、
良いことなんだと、よく言います。
昔から剣豪ほど怖がりだ。怖がりだから、人より強くなろうとする。
だから、ビビリでいる方がいいじゃないかと思うよ、と。

いつも書きますが、職種や業種は関係ありません。
要は構造ですから、
プログラマーにだって、同じことをアドバイスし、
同じように励まします。

このブログが誰かの役に立てるといいなと、今日も思うのです。

前回の記事の追記になります。
ーーーーーーーーーーーーーーーーーーーーーー
irb(main):010:0> 7%4**2
=> 7
irb(main):012:0> 5%3**2
=> 5


この計算式の答えは
余り3×3で9
余り2×2で4
になるのが正解のはずです。

こういった計算が複合になる場合は、
カッコで優先順位をつける必要があります。

irb(main):013:0> (7%4)**2
=> 9
irb(main):014:0> (5%3)**2
=> 4

ーーーーーーーーーーーーーーーーーーーーーー

上記の記事の下記の式について、
本当に計算を間違えたのか?
ということを解説したいと思います。

irb(main):010:0> 7%4**2
=> 7
irb(main):012:0> 5%3**2
=> 5

結論から言えば、
Rubyのルールでは、これは正しく、
算数式の答えとしては間違っています。


「Rubyのルールでは、これは正しく、」
とは、どういうことなのか。
それは記号に優先順にがあるからなんですね。

()で計算をまとめない状態の複合計算式では、
%(剰余計算)と**(べき算)では
べき算の方が優先順位が高いんです。

実際に優先順位の高い順に、一つ一つ計算してみます。

irb(main):001:0> 4**2
=> 16
irb(main):002:0> 7%16
=> 7

はじめにべき算すると、4×4で16という答えが出てきました。
次に剰余計算ですが、%は余りを返してきます。
整数の状態で、7を16で割ることはできないので、
7がそのまま余りになります。

ね、Rubyのプログラムでは間違いではないでしょう?

もちろん、通常の計算では7÷16は0.4375が正解ですが、
この0.4375という答えをコンピューターに返させるには、
割り算で、小数点を含めた式で記述する必要があります。

irb(main):003:0> 7/16
=> 0
irb(main):004:0> 7.0/16
=> 0.4375



Rubyは扱いやすいプログラミング言語であっても、
こういう部分の細かな指定や設定はたくさんあります。

逆に、細かな設定があるからこそ、
プログラミングが便利になっているとも言えます。

細かいのはいらないって?
他の言語では%のような細かな記法ひとつ書くのにも
もっとタイトなプログラミングの知識と、操る能力が必要です。
それと比べたら、むしろありがたいくらい親切な作りではないでしょうか。

↑このページのトップヘ