【ちゃんなるぶろぐ】社会人1年生が日々の学びをアウトプット!

>>> 読書・遊び・プログラミング・アプリ開発などを通して学んだことを、文章という形で出力 <<<

3分でわかる!「プログラマが知るべき97のこと」その①①

読み終えるまで約3分

 

 

どうも、ちゃんなるです! 

今日も”デキる”プログラマになるべく勉強していきましょう!

 

今回は、次の書籍の一部を要約します。

プログラマが知るべき97のこと』

 

下の記事の続編です↓↓

chan-naru.hatenablog.com

 

 

今回選択した3つのテーマ

本書はタイトル通り97のことについて書かれています。

今回は、31~33番目の項目についてまとめます。

  1. 状態だけでなく「ふるまい」もカプセル化する(No. 31)
  2. 浮動小数点数は実数ではない(No. 32)
  3. オープンソースプロジェクトで夢を実現する(No. 33)

 

①状態だけでなく「ふるまい」もカプセル化する

 

*このテーマの内容は抽象的で難しいと感じたため、別途解説記事を投稿する予定mm

 

このテーマで述べられていたことは、

「状態だけカプセル化しても、振る舞いをカプセル化できていなければオブジェクト指向をうまくいかせてない!振る舞いのカプセル化を忘れずに!。」

ということです。

 

まず、カプセル化とは、『あるオブジェクトの情報(変数や関数のこと)を、外部から直接アクセスできないようにすること』です。

 

状態は変数を、ふるまいは関数を表します。

外部からアクセスできないようにするとは、プライベート変数やプライベート関数にすること、と理解するといいと思います。

 

状態のカプセル化とは、例えばProductクラスのprice変数をプライベート変数として用意することです。

priceの値を変更するには別途、setPrice関数を用意してその中で行いましょう。

 

priceをカプセル化することのメリットは主に2つあります。

①priceの値を外部から変更できなくすることで、誤った値を代入するバグがなくなる

②setPrice関数内で値のバリデーションなどを行うことにより、誤った値がprice変数に入るリスクを減らせる、かつバリデーションをProductクラスの外部で行う必要がなくなる

 

カプセル化予期せぬバグをなくし、あるオブジェクトに関する処理はそのオブジェクトのクラス内で完結させられるのです!

 

 

浮動小数点数は実数ではない

このテーマで述べられていたことは、

浮動小数点数は厳密な実数と違って誤差が出る。これを踏まえた上で活用すべき!」

ということです。

 

以下、要約です。

浮動小数点数は、言語によっては『実数』と表現されるが、厳密には『実数』ではない

実数は『桁落ち』がなく、精度が無限である。

しかし浮動小数点数の精度は有限である。

 

たとえば、「2147483647」という数(符号付き32ビット整数の最大値)を、32ビットの浮動小数点型変数(仮にxとします)に代入し、xの値を出力したとします。すると、その結果は「2147483648」となります。x-64を出力しても、結果はやはり「2147483648」になり、x-65を出力すると、結果は何と「21483520」になってしまいます。なぜでしょうか?

 それは、この範囲では、数の間隔が「128」になっていて、浮動小数点数の演算では、最も近い数値への「丸め」が行われるためです。

(本書64ページより)

 

浮動小数点数は実数の近似値、と認識しましょう。 

誤差が生じることは避けられないと思ってください。

 

もしあなたが金融関係のアプリケーションを開発することになった場合、少しの誤差が大きな問題になり得る場合があるため、浮動小数点数は使うべきではありません。

 

浮動小数点数を使うときは、『どんな時に丸め誤差が出るか』を知り、それを踏まえた上で活用しましょう!

 

 

オープンソースプロジェクトで夢を実現する

このテーマで述べられていたことは、

「大きなプロジェクトに関わりたい!GoogleAppleのような大企業の開発するソフトに貢献したい!という夢を、オープンソースプロジェクトで叶えよう。」

ということです。

 

以下、要約です。

仕事でソフトウェア開発している人は多いでしょう。

しかし、自分の希望通りのソフトウェアを開発している人は少ないでしょう。

 

あなたは次のような夢を持っていませんか?

  • GoogleAppleMicrosoftなどで働いてみたい!
  • 次世代の中心を担うような斬新なソフトウェアを作ってみたい!
  • 超有名なライブラリのコントリビュータとなり、ドヤ顔で街を歩きたい!

そして、夢はあるけど今は別の仕事をしていませんか?

 

この夢の実現に近づく方法があります。

それは、オープンソースプロジェクトに参加する』ことです。

 

参加するにあたって注意することがあります。

  • 自分の時間を無償で提供しなければならない
  • 自分の頑張りが受け入れられるとは限らない

ですが、次のようなメリットは得られるでしょう。

  • ハイレベルな既存のコードやコントリビュータに触れ、知識を吸収することができる
  • 大好きなプロジェクトに貢献しているので、喜びを感じられる
  • 何かしら貢献できれば、それが自分の功績になる

 

その気があればぜひオープンソースプロジェクトに貢献してみてはいかがでしょうか!

 

OSSに貢献する方法は↓の記事でわかりやすく書かれていました。

qiita.com

 

 

まとめ

オブジェクト指向開発のメリットを活かすカプセル化を活用しよう!

そのときは状態だけでなく『ふるまい』もカプセル化することを忘れずに!

 

浮動小数点数は誤差を生む

どんなときに誤差が出るかを調べ、それを踏まえた上で活用しましょう!

 

③「イケてるプロジェクトを開発したい!」という夢は、オープンソースプロジェクトに貢献することで実現しましょう!

 

*より深く知りたい方は、ぜひ本書を手にとってみてください!

書籍情報

プログラマが知るべき97のこと [ ケブリン・ヘニー ]

価格:2,090円
(2021/5/13 11:12時点)
感想(1件)

【中古】 プログラマが知るべき97のこと /ケブリンヘニー【編】,和田卓人【監修】,夏目大【訳】 【中古】afb

価格:825円
(2021/5/13 11:12時点)
感想(0件)

【書籍名】プログラマが知るべき97のこと

【著者名】ケブリン・へニー、夏目大(訳)

【出版社】オーム社

【出版日】2010年12月

【ページ数】243ページ

 

***参考資料***

jpazamu.com

xtech.nikkei.com