プログラミング言語の諸概念の解釈①:変数
これから何回かに分けてプログラミング言語(特にruby)に出てくる基本的な概念(変数やメソッドなど)について自分なりに考えたことをまとめていきたいと思います。なお、長ったらしい割にてんで間違いということもあるかもしれません。その時は許してくださいね。
第一回は変数
についてです。
変数とは、特定の文字列や数値を抽象化するために用いる概念のことです。私たちは何かを覚えたり、考えたりするとっかかりを得るために、抽象化という作業を日頃行っています。
私たちは自分の家のコンロの火に直に触れるのは危険であることをよく知っています。なぜでしょうか?実験したことがあるから?
人類は火の危険な側面ー高エネルギーをもって激しい痛みや死をもたらすーにそれを積極的に利用しようと試みるはるか以前から知っていたことでしょう。
そして、人類はまた「太陽光に長時間曝された岩」に触れると痛いということにもかなり早期から気づいていたはずです(気づけなかった種は淘汰されたことでしょう)。
ここで火と日光に長時間曝された岩の間には共通の性質を見出すことができます。それは熱いということです。表面上異なることがらから共通性を見出して概念化すること、このことを抽象化と呼ぶことにしましょう。
抽象化することにはどんなメリットがあるのでしょうか?
冒頭で述べた通り、最大のメリットは覚えることと考えるのに必要なリソースを大幅に削減してくれることです。
コンロの話に戻りましょう。私たちは自分の家のコンロの火だけではなく、友人のA君家のコンロの火にもまた直に触れてはいけないということを知っています。一々~~の家のコンロの火を触っていけないと暗記して回っているのではありません。火は熱くて危険という論理だけが無意識レベルで存在していて、そしてそれだけ存在していれば十分なのです。また、コンロの火で十分時間熱した金属のスプーンに手を触れても危険はないでしょうか?ー危険です。触れたことはないですが分かります。それは「火→危険」というロジックではなく、「火(や熱を持った物)→熱い→危険」という抽象化を一枚噛ませることで、考えるとっかかりが得られ、上記のスプーンを直に触ってはいけないという結論を得ることができるのです。金属の熱放射に関して理工書をあさる必要はないのです。
気づいたら説明が長くなっていました。。。
まとめると、変数とは数字や文字列を抽象化する
ための道具です。日常生活から乖離したものでは断じてないのです。
【Ruby on Rails】Ubuntuからローカルホストサーバを立ち上げる方法
[環境]
ruby: 2.6.3
ruby on rails: 5.2.3
ubuntu: 18.4
Linuxの勉強も兼ねてubuntuをインストールしてrailsの勉強をはじめました。
ローカルサーバを立ち上げようとrails server
を実行するも
~~~略~~~ 1: from /var/lib/gems/2.5.0/gems/execjs-2.7.0/lib/execjs.rb:5:in `<module:ExecJS>' /var/lib/gems/2.5.0/gems/execjs-2.7.0/lib/execjs/runtimes.rb:58:in `autodetect': Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)
というエラーが出てしまい、早速出鼻をくじかれる。
エラー文を見ると、どうもjavascriptのruntime(jsの実効機能のみからなるパッケージのようなもの)を入れる必要があるらしいです。。。
とりあえずエラー文に貼っていたURLにアクセスしてNode.jsがrubyのjs用runtimeだと知るも、これだけのインストールではだめでした。。。
記事によると
- Node.jsをインストール:
$ sudo apt-get install nodejs
- gemfileに以下のライブラリ群を書き加える。(筆者はこのgemfileの編集が抜けていました)
gem 'libv8' gem 'execjs' gem 'therubyracer', :platforms => :ruby
bundle install
する
$ bundle install
最後にローカルサーバーを以下のコマンドで立ち上げ、http://localhost:3000にアクセス
$ bin/rails server
できました。
このブログについて
このブログは、筆者がプログラミング学習で学んだことを自分の中で整理し、共有するために立ち上げたものです。
筆者はプログラミングを初めて日が浅く、技術知識の共有・解説というよりはむしろプログラミング関連の本の読書記録になりかねないのですが、学んだことを自分なりに整理して組み砕いて説明できるよう意識していきたいと思います。まずは続けるところから。。。
なお、このブログで投稿される記事はすべてMarkDown記法によって記述されています。