{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## 6-2 クラスオブジェクト\n", "### 6-2-1 class定義式" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Klass\n" ] }, { "data": { "text/plain": [ "Klass" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class Klass\n", " p(self)\n", "end" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 6-2-2 インスタンス変数" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ ":class_instance_val" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class Klass\n", " @class_instance_val = :class_instance_val\n", "end" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ ":class_instance_val" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class Klass\n", " @class_instance_val = :class_instance_val\n", " \n", " def self.class_instance_val\n", " @class_instance_val\n", " end\n", "end\n", "\n", "Klass.class_instance_val" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "クラス変数/クラスインスタンス変数" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ ":instance_method" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class Klass\n", " @class_instance_val = :class_instance_val\n", " @@class_val = :class_val\n", " \n", " def instance_method\n", " p(@class_instance_val)\n", " \n", " @@class_val\n", " end\n", "end" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "nil\n" ] }, { "data": { "text/plain": [ ":class_val" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Klass.new.instance_method" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ ":instance_method" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class Klass\n", " @class_instance_val = :class_instance_val\n", " \n", " def instance_method\n", " p(p(self).class).instance_variable_get :@class_instance_val\n", " end\n", "end" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "#\n", "Klass\n" ] }, { "data": { "text/plain": [ ":class_instance_val" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Klass.new.instance_method" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ ":class_instance_val" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Klass.instance_variable_get(:@class_instance_val)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[:@class_instance_val]" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Klass.instance_variables" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "nil\n", ":class_val\n" ] }, { "data": { "text/plain": [ ":class_val" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class Klass\n", " @class_instance_val = :class_instance_val\n", " @@class_val = :class_val\n", "end\n", "\n", "class InheritKlass < Klass\n", " p(@class_instance_val)\n", " \n", " p(@@class_val)\n", "end" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0\n" ] }, { "data": { "text/plain": [ "5" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class InstanceCountClass\n", " @@instance_count = 0\n", " \n", " def self.instance_count\n", " @@instance_count\n", " end\n", " \n", " def initialize\n", " @@instance_count +=1\n", " end\n", "end\n", "\n", "p(InstanceCountClass.instance_count)\n", "\n", "5.times do\n", " InstanceCountClass.new\n", "end\n", "\n", "InstanceCountClass.instance_count" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "10\n" ] }, { "data": { "text/plain": [ "10" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class NewInstanceCountClass < InstanceCountClass\n", "end\n", "\n", "p(NewInstanceCountClass.instance_count)\n", "\n", "5.times do\n", " NewInstanceCountClass.new\n", "end\n", "\n", "p(InstanceCountClass.instance_count)\n", "NewInstanceCountClass.instance_count" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "5" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class InstanceCountClass\n", " @instance_count = 0\n", " \n", " def self.instance_count_up\n", " @instance_count += 1 if @instance_count\n", " end\n", " \n", " def self.instance_count\n", " @instance_count\n", " end\n", " \n", " def initialize\n", " self.class.instance_count_up\n", " end\n", "end\n", "\n", "5.times do\n", " InstanceCountClass.new\n", "end\n", "\n", "InstanceCountClass.instance_count" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "nil\n", "5\n" ] } ], "source": [ "class NewInstanceCountClass < InstanceCountClass\n", "end\n", "\n", "p(NewInstanceCountClass.instance_count)\n", "\n", "5.times do\n", " NewInstanceCountClass.new\n", "end\n", "\n", "p(InstanceCountClass.instance_count)\n", "NewInstanceCountClass.instance_count" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class NewInstanceCountClass2 < InstanceCountClass\n", " @instance_count = 0\n", "end" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0\n" ] }, { "data": { "text/plain": [ "5" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p(NewInstanceCountClass2.instance_count)\n", "\n", "5.times do\n", " NewInstanceCountClass2.new\n", "end\n", "\n", "NewInstanceCountClass2.instance_count" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Tips: Smalltalkにもクラスインスタンス変数は存在する\n", "\n", "次回 6-2-3 クラスメソッド " ] } ], "metadata": { "kernelspec": { "display_name": "Ruby 2.5.1", "language": "ruby", "name": "ruby" }, "language_info": { "file_extension": ".rb", "mimetype": "application/x-ruby", "name": "ruby", "version": "2.5.1" } }, "nbformat": 4, "nbformat_minor": 2 }