Nature is where happiness is~自然は幸せの在処~

「ひとりひとりが、主体的に自然と関わり合う社会」をめざし、ナチュラルでサステナブルで、刺激的な日々を過ごす日記。

ruby復習記 ~序章~

ruby復習記 ~序章~

1イントロダクション

2”初めに”(オブジェクト指向スクリプト言語 Ruby リファレンスマニュアル)

3"コマンド"

4”Rubyの起動”

5"環境変数"

最近はずーっっっっっとパソコンの画面と向き合っている。ひっきりなしに起こる、エラーの数々。あの赤と白の画面とはもう何回遭遇したことか。

今年の3月の中旬から、プログラミングを初めて、早3ヶ月。自分でサービスを作成しているのだが、どうも最近全くうまくいかない。Gemの導入に失敗するやら、コロンをつけ忘れるやら….

ここれはもしや、自分の学習法を見直してみる良い機会なのではないのか?本当に自分は基礎的な概念を100%理解できているのだろうか?

んーーーー、どうやって学び直そうかなぁ。

ハット思いつく!

プログラミングって、所詮言語じゃん!少し抽象的で難しい言語じゃん!だったら、まず ABCから始めよう!!

ということで、プログラミングの基礎の基となる概念を、勉強がてら、このブログにつらつらと書いていくことにしました。

ruby復習記:Thanks to “オブジェクト指向スクリプト言語 Ruby リファレンスマニュアル”(こちらを参考に!) 1始まりの序章: 1初めに 2コマンド 3Rubyの起動 4環境変数

1初めに ここからは、リファレンスマニュアルに記載されている概念について、自分の理解を確認するために、つらつらと書いてく仕様にします(完全に自分用メモなので、適当ですが。)この始まりの章では、おもにrubyの言語仕様について書かれています。 16の特徴: a, インタプリタ Rubyインタプリタ言語ですので プログラムを実行するためにコンパイルする必要はありません。 私たちの使うパソコンには、OS(Operating System)という案内システムが搭載されています。OSはハードウェアを制御するソフトであり、その際には機械語が使用されます。機械語とはその名の通り、機械が使用する言語(0と1の計算とかデータとか、マトリックスみたいなやつ)です。機械語は私たちユーザーが直接使用することができません。じゃあ何でOSを動かしているのか、というと、そう、プログラムです。 このプログラムは、機械語をどのように処理するのか、で2つの種類に分けられます。一つ目がインタプリタ、二つ目がコンパイラ。この二つの違いは、いつプログラムを機械語に変換するか、というタイミング。インタプリタがプログラムの実行と同タイミングでプログラムを機械語に翻訳する一方コンパイラは実行をする前に、まとめて翻訳をします…( http://nyumon-info.com/program/bunrui.html) こんなに書いてると、マジで眠れないので、もっと説明をライトにしてきます。

b,変数に型が無い (動的型付け) Rubyの変数はどのような型のデータも格納する事ができますので、 変数の型について心配する必要はありません。 半面、コンパイル時のチェックは弱くなります。 他のプログラミング言語は、実行をする前にそのオブジェクトの型を指定しなければならないのですが、Rubyでは、あらかじめの型は気にせず、実行したのちの値で判断をする、というもの。 https://ja.wikipedia.org/wiki/%E5%8B%95%E7%9A%84%E5%9E%8B%E4%BB%98%E3%81%91

c,変数宣言が不要 Rubyでは変数を宣言無しで使う事ができます。 変数の種類(ローカル変数、グローバル変数インスタンス変数など)は 変数名から知る事ができます。 変数宣言とは、何か変数を使用する際に、その前にデータ型を記述しなければならないという決まりごとのこと。例えば、"たとえば「int i;」と書いた場合「int型の変数iを宣言した」と言う"(変数宣言とは : JavaA2Z)。めんどくさいね.Rubyでは宣言せずOk)

単純な文法 Rubyの文法はEiffelからわずかに影響を受けた単純なものです。

ユーザによるメモリ管理が不要 Rubyはメモリ管理を自動的に行います。 どこからもアクセスされなくなったオブジェクトは インタプリタに組み込みのガーベージコレクタによって回収されます。

全てがオブジェクト Rubyははじめから純粋なオブジェクト指向言語として設計されています。 整数のような基本的なデータ型をはじめとして、 全てのデータをオブジェクトとして統一的に取り扱えます。

今日はこれ書いたら寝ますわ。

そもそもオブジェクトってなんなの?って話ですよね。俺も耳にするけども、全然わかんなかったのですが、この記事を読んで、少し理解が進みました。 qiita.com

オブジェクトには、三つの項目が定義としてあります。 1,アイデンティティを持つ 2,メッセージを受け取る 3.内部状態を持つ

アイデンティティとは、例えば1という整数は"Fixnum"というクラスに属していること、レシーバー.classとすると、そのレシーバーがどこかのクラスに属していることがわかるということ。

オブジェクトの精製方法は3つ。 リテラル表記を使った簡潔なもの(数字の1や文字列"hello world"のようにRubyのプログラムの中に直接 記述できる値の事をリテラルといいます。) 変数に格納したものか、 クラス名で指定したもの。

全てのオブジェクトは、どこかのクラスに属するインスタンスであるんだね!!

a = Cat.new # => Catクラスのインスタンス “aaa” # => Stringクラスのインスタンス 123 # => Fixnumクラスのインスタンス [1,2,3] # => Arrayクラスのインスタンス {aaa: 122} # => Hashクラスのインスタンス :aaa # => Simbolクラスのインスタンス

そして、このCatとかStringのクラスってなんなの?

Cat.class => Class String.class => Class Fixnum.class => Class Array.class => Class Hash.class => Class Simbol.class => Class

Classのclassですね!!! つまり、全てのクラスはClassクラスのオブジェクトに所属する!!!

fクラス、継承、メソッド

Rubyは クラス、継承、メソッドのようなオブジェクト指向言語として基本的な機能は 当然持っています。

モジュールによるMix-in Rubyは多重継承は複雑さの源であるという見地から、 意図的に多重継承を持っていませんが、 モジュールを使ってクラス階層を横断して実装を共有できます。 この機能を"Mix-in"と呼びます。

ブロック付きメソッド呼び出し(イテレータ) 制御構造の抽象化を援助するブロック付きメソッド呼び出しという機能があります。

クロージャ 手続きをオブジェクトとして扱う機能があります。 このオブジェクト化された手続きのことをクロージャと呼びます。

強力な文字列操作/正規表現 Perlをお手本とした強力な文字列操作や正規表現検索の機能があります。

多倍長整数 組み込みの多倍長整数機能がありますので、 メモリが許す限り、非常に大きな整数の演算もできます。 たとえば、400の階乗なども簡単に計算できます。

例外処理機能 例外処理機能は例外的な状況への対処が簡単に書けます。

OSへの直接アクセス Rubyは(UNIXの)ほとんどのシステムコールの呼び出し機能を持っています。 Rubyだけでシステムプログラミングも可能です。

ダイナミックローディング OSが許せば、オブジェクトファイルを実行時に読み込む機能が提供されます。

rubyすげえ