「分岐」を含む日記 RSS

はてなキーワード: 分岐とは

2018-10-20

増田プログラマー養成講座 その8 OOPの仕組み(後半)

前回に続いて、今回もオブジェクト指向プログラミングOOP)の基本的な仕組みを見ていこう。

 

教材は、ドットインストールPHP入門です。

OOP関係してる#18から#24までのうち、後半の#22から#24までを一緒に見てみよう!

 

#22 staticキーワードを使ってみよう

動画でこんな用語が出て来た。

 

 

static

クラスベースOOPオブジェクトを使う場合普通は「クラスからインスタンスオブジェクトの具体的な実体)を作ってから使う」と説明した。

実は、newでいちいちインスタンスを作らなくても、クラスメンバープロパティーやメソッド)を直接呼び出して使える仕組みも用意されている。

それが「static」(静的)という仕組みだ。

 

「静的」(static)という言葉は、「動的」(dynamic)の対義語になっている。

newでインスタンスポンポン作っていくのが「動的」なら、new無しでコッソリとメンバーを呼び出すのが「静的」というかんじ?

 

PHPでは、インスタンスを作らなくても、直接(静的に)呼び出せるメンバーには「static」という目印を付けておく、という文法になってる。

さらに、

 

それではstaticなメンバーを入れたクラス定義してみよう。

class User {

 // プロパティー:インスタンス変数(staticなし。newした後じゃないと使えない)

 public $name;

 // プロパティー:静的変数(staticあり。newなしでいきなり使える)

 public static $count;

}

 

文法的には「static」という印を付けるか、付けないかの違いしかない。簡単だ!

次は、staticなメンバーの呼び出し方を見てみよう。

 

::演算子

ちょっと待った!「演算子」という言葉は初めて出てきたね?意味確認しておこう。

1+2は3になる等、対象(1とか2とかの数値データ)を操作(=演算)して、3という結果を得られる。

 

「::」はスコープ定義演算子とか、ダブルコロンと呼ばれている。PHPマニュアルでは以下のように説明されている。

static, 定数 およびオーバーライドされたクラスプロパティメソッドアクセスすることができます

静的メンバーを呼び出す専用の記号として「::」という演算子記号)が用意されている、というわけだ。

まり、「::」という演算子を使うことで、静的メンバー操作できる。

 

それでは、「::」を使って、静的メンバーを呼び出してみよう。

class User {

 // プロパティー:インスタンス変数(staticなし。newした後じゃないと使えない)

 public $name;

 // プロパティー:静的変数(staticあり。newなしでいきなり使える)

 public static $count;

}

 

// new無しでいきなり使える!

User::$count = 1; // 1を代入する。

echo User::$count; // 1と表示される。

 

実験で以下のコードも追加してみよう。

// staticが付いてないインスタンス変数(new無しで使えない)を呼び出す。(本来は呼び出せない)

User::$name = "yamada";

echo User::$name;

実行すると

PHP Fatal error: Uncaught Error: Access to undeclared static property: User::$name

というエラーメッセージが表示された。

「staticなプロパティーとして定義されてないから、アクセスできないよ!」と怒られた~~~(涙)

staticじゃないメンバーには、ちゃんとnewしてインスタンスを作ってからアクセスしないと、使えないんですね。(面倒)

 

キーワード「self」

オブジェクトメンバープロパティー、メソッド)に、オブジェクトの中のメンバーアクセスするとき

という使い分けになってる。単にこれはPHP文法なので、特に悩む余地はない。

 

this=インスタンスメンバー操作する場合

class User {

 // 普通プロパティー:インスタンス変数(staticなし。newした後じゃないと使えない)

 public $name; // ←この$nameをこの下にあるをhello()から使いたい

 // 普通メソッド

 public function hello() {

  echo "Hello, " . $this->name; // this->で指定する

 }

}

$taro = new User;

$taro->name = "Yamada Taro";

$taro->hello(); // Hello, Yamada Taro

「this」が自分自身オブジェクトを指し示す。

$this->nameで、オブジェクト(この場合インスタンス)内の$nameアクセスできる。

 

self=クラスの静的メンバー操作する場合

class User {

 // staticなプロパティー:静的変数(staticあり。newなしでいきなり使える)

 public static $name; // ←この$nameをこの下にあるをhello()から使いたい

 // staticなメソッド

 public static function hello() {

  echo "Hello, " . self::$name; // self::で指定する

 }

}

// new無しでいきなり使える!

User::$name = "Suzuki Hanako";

User::hello(); // Hello, Suzuki Hanako

「self」が自分自身オブジェクトを指し示す。

self::$nameで、オブジェクト(この場合クラス)内の静的な(staticな)$nameアクセスできる。

言ってる意味、分かる?(説明が分かりにくい?)

 

スコープとは?

「this」とか「self」とか、いちいち使い分けていて面倒くさいなーと思うだろう。

なんでこんなことをやってるか?というと「スコープ」という仕組みが関係してる。

ドットインストールPHP入門でも、#16でちょっとスコープについて説明してあった。

PHPスコープの種類は3種類しかありません

  1. ローカルスコープ
  2. グローバルスコープ
  3. スーパーグローバル

 

スコープ有効範囲

スコープ」(scope, 可視範囲)は、元々は潜水艦に付いてる望遠鏡(潜望鏡)のこと。

プログラミングでは、あるデータ変数とか)がどこまで見えるか、覗けるか、という範囲のことを「スコープ」と呼んでる。

変数関数がどの範囲まで有効なのか、使えるのかは、その変数関数スコープで決まっている。

Wikipediaで「スコープ」の説明を見ると、ゴチャゴチャ書いてあるけど、要するにスコープには、広い範囲や狭い範囲があるってこと。

 

thisやselfをわざわざ使い分けているのは、範囲を指し示すときに、

それとも

という場所の違いをハッキリと区別するためなんだ。

 

クラスオブジェクト設計図)を眺めたときに、

thisを使ってたら、「ああ、newしてインスタンスを作らないと使えないんだな」と分かる。(インスタンスの中の話)

staticとselfを使ってたら、「newしないで、静的に使えってことだな」と分かる。(クラスの中の話)

 

太郎の$nameとか、花子の$nameとか、インスタンス場合は、各インスタンスメンバーは、明確に分かれていて、両者が混ざることはない=別々のスコープになってる。

クラスの静的メンバーは、そのクラスに1個しかないので、そのクラスをnewしないで(インスタンス無しで直接呼出しときは)、いろんなところから呼び出されても、共通の中身になってしまう=スコープが1個、同じスコープになってる。

 

インスタンス変数クラスの静的変数は別物なので、thisとselfで使い分けてる、というわけだな!

 

ここまで読むと「staticって面倒くさいやつだな!なくてもいいじゃん!」と思っただろう。その通り!

staticは使わなくて済むなら、なるべく使わない方がいい。

「static 欠点」で検索してもらえば、staticを使った場合問題点が紹介されている。

どうしてもstaticじゃないと実現できないこと、staticの方が便利な場合だけ、staticを使うようにしよう。

 

(参考)PHPのstaticの使い方

 

#23 抽象クラスを使ってみよう

動画でこんな用語が出て来た。

 

 

抽象クラス

これはドットインストール説明そのままでOKですね。

 

具象クラス(今まで勉強してきた普通クラス)だけではなく、「抽象クラス」という特殊クラスを作る仕組みも用意されている。

抽象クラスは、継承してその子クラスを作るとき、「必ずこのメソッド自分で作れよ!」などと強制できる。

まりクラスの利用方法継承とか)について、プログラマーに指示を出せる働きがある。

 

抽象クラスの特徴として、具象クラス(通常のクラス)との違いを挙げます

 

1. 抽象メソッド定義する事ができる。

抽象メソッドとは、実際の処理を自身にではなく子クラス記述させるためのメソッドです。

この抽象メソッド記述できることが、抽象クラスの最大の特徴です。

抽象クラス継承したクラスは、この抽象メソッドを必ず「オーバーライド」しなければなりません。(オーバーライドしないとコンパイルエラーとなります。)

 

2. 抽象クラス単体でインスタンスを生成する事はできません。

抽象メソッド定義している。

まり、実際の処理を記述していない訳ですから当然インスタンスを生成して使用する事は出来ません。

JavaPHPも同じですね。

 

#24 インターフェースを使ってみよう

OOP継承には、「単一継承」と「多重継承」という種類がある。

普通は、「単一継承」といって、親クラスからクラス継承して作るとき、親クラスは1個だけしか指定できない。(1:1)

クラスA、クラスB、クラスCの3つを親クラスとして、クラスZという子クラス継承して作る仕組みは、「多重継承」という。多重継承可能場合、子クラス複数の親クラスを持てる。(多:1)

 

PHPJavaでは、多重継承ができない代わりに、「インターフェース」という仕組みが用意されている。

インターフェースを使うと、多重継承と似たようなことができる。

 

↑ここにクラスインターフェースの相違点がまとめられてたので、参考にしてみてください。

 

インターフェースの使い方、文法を見ておきましょう。

  • class」の代わりに「interface」を使う。
  • 「extends」の代わりに「implements」を使う。
  • 継承する」という代わりに「実装する」という言い方をする。

interface sayHi {

 public function sayHi();

}

interface sayHello {

 public function sayHello();

}

class User implements sayHi, sayHello {

 public function sayHi() {

  echo "hi!";

 }

 public function sayHello() {

  echo "hello!";

 }

}

$taro = new User; // コンストラクターに渡す初期データがない場合「new User();」みたいに「()」を付けなくてもOK

$taro->sayHi(); // hi!

$taro->sayHello(); // hello!

 

PHPOOP機能

#22から#24までを見て、PHPOOP基本的な仕組み~使える機能について見てきました。

PHPには、他にもいろんなOOPで使える機能が用意されています

 

その他のOOP機能

Javaなど他のプログラム言語には、PHPにはないOOP機能も用意されています

オブジェクトを利用するときの仕組みとして、いろんな方法が考えられてます

 

使う機会があれば調べてみましょう。

 

ここまでで、やっとOOP基本的な仕組み、用意されている機能テクニックを学びました。

次回は、なぜこんなOOPの仕組みが考え出されたのか?どうやってOOP活用していくのか?を見ていきましょう。 


anond:20181015215004経験からプログラマーなんだが全然からない

anond:20181016015826 増田プログラマー養成講座 その1 パソコンの用意

anond:20181016164341 増田プログラマー養成講座 その2 プログラムデータ+処理、プログラム言語の種類

anond:20181016180059 増田プログラマー養成講座 その3 構造プログラミングの基本(順次、反復、分岐

anond:20181016193144 増田プログラマー養成講座 その4 子ども向け教材「Scratch」で構造プログラミング練習

anond:20181017161003 増田プログラマー養成講座 その5 オブジェクトとは何か?

anond:20181017191404 増田プログラマー養成講座 その6 OOPの種類、PHPの準備

anond:20181019181549 増田プログラマー養成講座 その7 OOPの仕組み(前半)

anond:20181020230044 増田プログラマー養成講座 その8 OOPの仕組み(後半)

2018-10-19

増田プログラマー養成講座 その7 OOPの仕組み(前半)

前回は「オブジェクトとは何か?」を説明した。

今回はオブジェクトの使い方=オブジェクト指向プログラミングOOP)で用意されている仕組みを見てみよう。

とりあえずPHPで仕組みを学習してみよう。(PHPJavaより簡単なので理解やすい)

OOPでは用語概念がたくさん出てくるので、まずは用語意味を押さえよう。(英単語ばっかだね。日本語にして欲しいね。)

 

注意点:文字化けエスケープ)について (修正済)

以下の説明で、半角文字の「>」(不等号の記号)が「>」という表示に変わってしまっている。

「->」となってるところは「->」(>は本来は半角文字)なので、読み替えてください。

 

ドットインストールPHP入門でOOP学習

 

元増田は、もう一通り全部見てくれたかな?

OK、それじゃOOP関係してる#18から#24を一緒に見てみよう!

 

#18 クラスインスタンス理解しよう

動画でこんな用語が出て来た。

 

 

クラスとは?=オブジェクト定義

クラスベースOOPJavaPHPなど)は、オブジェクトを作るときに、「クラス」という仕組みで用意する。

プロトタイプベースOOPJavaScriptでは、「プロトタイプ」という仕組みで用意できる。=別の機会に使ってみよう)

 

クラスベースOOPで「オブジェクト」と言った場合クラスインスタンスの両方を指し示すことができる。

 

 

クラスメンバー

クラスには「プロパティー」(データ)と「メソッド」(処理)を入れられる。

も作れる。

クラスの中に入っている「プロパティー」や「メソッド」のことをまとめて「メンバー」と呼ぶ。

からメンバーってのは、クラス構成員だね。プロパティーやメソッドメンバーになれる。

 

// クラスオブジェクト設計図オブジェクトデータと処理をまとめて入れられる箱。

class クラス名 {

 // プロパティー(データ)の部分

 public $name = ''; // 名前 // ※「public」の使い方は後で説明

 public $age = ''; // 年齢

 // メソッド(処理)の部分

 public function get_name() { // 名前を取得する

  return $this->name; // ※「this」の使い方は後で説明

 }

 public function set_name($new_name) { // 名前を設定する

  $this->name = $new_name;

 }

}

 

コンストラクター

コンストラクター」は特別メソッドで、クラスからインスタンスが作られるときに、自動的に呼び出される。

コンストラクターを使えば、インスタンスを作るとき自動的に実行しておきたい処理(下準備=初期化とか)をやらせられる。

class User {

 // プロパティー(データ)の部分

 public $name = '';

 public $age = '';

 // コンストラクタークラスからインスタンスを作る(new)とき自動的に実行される特別メソッド

 public function __construct($name, $age) { // PHPコンストラクター名は「__construct」と書く。

  $this->name = $name;

  $this->age = $age;

 }

 // メソッド(処理)の部分

 public function get_name() {

  return $this->name;

 }

 public function set_name($new_name) {

  $this->name = $new_name;

 }

}

 

デストラクター

説明には出てこなかったけど、コンストラクターと反対に、デストラクターという仕組みもある。

 

インスタンス

インスタンスクラスオブジェクト設計図から作ったオブジェクトの(具体的な)実体のこと。

インスタンスは「new」で作る。

$taro = new User('taro', 20); // name='taro', age=20コンストラクターでセットしたい。

これで「太郎」(顧客の1人)という具体的なインスタンスが、User利用者クラスから作られた。

太郎($taro)というインスタンスを作った後は、これで太郎に関するいろいろな操作ができるようになる。

 

アロー演算子

インスタンス太郎」の中にあるメンバープロパティーやメソッド)を使いたい場合アロー演算子「->」(矢印)で指定する。

 

echo $taro->name; // 太郎nameを表示せよ

$taro->name = 'yamada taro'; // 太郎nameを「yamada taro」にせよ

$taro->set_name('タロウ'); // 太郎のset_nameメソッドで「タロウ」という名前を設定せよ

等という操作ができる。

 

#20 クラス継承してみよう | PHP入門

動画でこんな用語が出て来た。

 

 

extends(継承

OOPでは、あるクラスオブジェクト設計図から、別のクラスを作りだすことができる。これを「継承」と言う。

 

// 元にするクラス

class User {

 // プロパティ

 public $name;

 public $age;

 // メソッド

 public function hello() {

  echo "Hello, " . $this->name;

 }

}

// 継承して新しく作るクラス

class Special_user extends User {

 // プロパティ

 public $point; // 特別会員のポイント

 // メソッド

 public function your_point() {

  echo "あなたポイントは".$this->point."点集まりました。";

 }

}

 

上記の例だと、基になった「User」が親クラスUser継承して新たに作った「Special_user」が子クラスとなる。

 

オーバーライド

オーバーライドとは「上書き」という意味

継承して新しい子クラスを作るとき、親クラスにあるメソッド機能を一部改造したい場合がある。そんなときは上書きして、中身を入れ替えることができる。

オーバーライド簡単で、単に同じ名前メソッドを用意すればいいだけ。新たに用意したメソッドで中身が上書きされる。

 

// 元にするクラス

class User {

 // プロパティ

 public $name;

 public $age;

 // メソッド

 public function hello() {

  echo "Hello, " . $this->name;

 }

}

// 継承して新しく作るクラス

class Special_user extends User {

 // プロパティ

 public $point; // 特別会員のポイント

 // メソッド

 public function your_point() {

  echo "あなたポイントは".$this->point."点集まりました。";

 }

 // 親クラスにあったメソッドと同名のメソッドを用意すれば、上書きして中身を変更できる。

 public function hello() {

  echo "こんにちは、".$this->name."様";

 }

}

 

final

オーバーライドして中身を変更されてしまうと困るメソッドがあった場合オーバーライドできないように設定しておくこともできる。

その場合は、メソッド名の前に「final」と書いておけば、最終的な決定形となり、オーバーライドで中身を変更できなくなる。

その他、finalの使い方はマニュアルも参考にしてください。

 

#21 アクセス権について理解しよう

OOPでは「カプセル化」といって、オブジェクトの中にあるメンバープロパティーやメソッド)を外から見えない(操作できない)ようにすることができる。

 

隣の家の窓を想像して欲しい。

カーテンによって、3段階で覗けるようになっている。これと同様のことがオブジェクトメンバーにも設定できる。

 

メンバーアクセス権を設定してやれば、オブジェクトの外からの見え方を設定できる。

 

大雑把に言えば、オブジェクトカプセル化プロパティー(オブジェクトの「状態」)は見えなくして、メソッドオブジェクトの「操作」)は見えるようにしてやれば、だいたいうまく使えます

これは「副作用(予期せぬ変化)の隠蔽化」といって、「オブジェクトの中身を外部から守る」という考え方です。

アクセサー」(ゲッターセッター)という「オブジェクト操作用のメソッド」を用意してあげて、中身の操作制限を加える方法があります

 

区切り

まずは、ここまでの内容をドットインストールサンプルコードなどを実際に動かしてみて、仕組みをよく理解するようにしてください。

#22から#24は、今の段階では「こんな機能も用意されているのか。へー」ぐらいでもOKだと思います

 

多分、素朴な疑問として、「OOPのために、こんな仕組みが用意されているのは分かったけど、何が便利なんだろ?」と訝しく見えるだろうと思います

OOP基本的文法機能を知った後、実際にOOPを使ってみる演習をやってみれば、使いどころや便利さが分かるようになると思います

次回は、残りの#22から#24までの説明を見てみましょう。

 


anond:20181015215004経験からプログラマーなんだが全然からない

anond:20181016015826 増田プログラマー養成講座 その1 パソコンの用意

anond:20181016164341 増田プログラマー養成講座 その2 プログラムデータ+処理、プログラム言語の種類

anond:20181016180059 増田プログラマー養成講座 その3 構造プログラミングの基本(順次、反復、分岐

anond:20181016193144 増田プログラマー養成講座 その4 子ども向け教材「Scratch」で構造プログラミング練習

anond:20181017161003 増田プログラマー養成講座 その5 オブジェクトとは何か?

anond:20181017191404 増田プログラマー養成講座 その6 OOPの種類、PHPの準備

anond:20181019181549 増田プログラマー養成講座 その7 OOPの仕組み(前半)

anond:20181020230044 増田プログラマー養成講座 その8 OOPの仕組み(後半)

2018-10-17

増田プログラマー養成講座 その6 OOPの種類、PHPの準備

前回は、オブジェクト説明をした。

今回は、オブジェクトの使い方=オブジェクト指向プログラミングOOP)を学ぼう。

 

OOPの種類

オブジェクト指向プログラミングには、

  1. クラスベースJavaC++など)
  2. プロトタイプベースJavaScript、Ioなど)

などの分類があります

ここではクラスベースOOPを取り上げる。学習時間を短縮するために、Javaよりも簡単PHPOOPの基本を勉強してみよう。

 

PHPとは?

PHP (プログラミング言語) - Webページ作成のために用いられることの多い汎用プログラミング言語一種

PHPは誰でも手軽に使えるように工夫された、軽量なプログラム言語です。

 

PHPの準備

WindowsパソコンPHPを使うために、XAMPPというソフト無料)をインストールしよう。

 

XAMPPはいくつかバージョンがあるけど、ここではUSBメモリに保存できる「ポータブル」を使ってみよう。

↑このページにある「xampp-portable-win32-7.2.10-0-VC15.zip」をダウンロードして、ZIPファイルを展開します。

解凍して出てきた「xampp」をCドライブ直下コピーしてください。

これでPHPの実行環境XAMPP)の準備は完了です。

 

XAMPPの起動

Port(s)が「80,443」と表示されたら、XAMPP上のApacheWebサーバーソフト)が起動して、PHPが使える状態になってます

Apacheを止めるときは、「Stop」ボタンクリックします。)

 

PHPスクリプト作成

phpとは - はてなキーワード http://d.hatena.ne.jp/keyword/php

↓こんなかんじのサンプルコードがあるよね。

<?php

print("Hello, world!");

?>

プログラムソースコード増田に直接書くと、エスケープされて違う文字になるので、上の例では一部文字を置き換えてある。)

上記の表示の中で、全角文字の不等号「<」「>」を半角文字の不等号に置き換えて下さい。)

増田プログラムコード貼付けられないのか。不便だな!)

以上で、PHPプログラミングの準備と動作確認ができた。

 

PHPの基本文法

PHPの教材は、本やネット上の記事動画などたくさんある。自分で分かりやすものを探して読んでみよう。

ここではドットインストールPHP入門を参考にしてみよう。

 

3分程度の動画が30個=90分。最初は内容を理解できなくてもいいから、とりあえず全部一通り見てみよう。(1巡目は雰囲気だけつかめOK

 

「つまづきノート」の作成

2巡目以降は分からないことがあったらノート等にメモして、後で1つずつ解明していこう。

著者あとがき

 

私はGitを学ぶのに、実はとても苦労しました。それと同時に、「きっと同じように困っている人が他にもたくさんいるはずだ」と考えました。「理解するのに数日かかることを、短い時間でパパッと学べるコンテンツを作りたい」そう思いつき、「マンガでわかるGit 第1話」個人サイトにて公開したところ、いきなり、はてなブックマークで800ブックマークされました。

 

“つまづきポイント”を先回りするために

私は、Gitを使い始めて以降、わからないことがあったら「つまづいたこノート」に書いてきました。なお、本書の執筆にあたっても、日々勉強しながら解説を書くという形でした。わかばちゃんが「なんでこうなるの?」と疑問に思う部分は、私が過去につまづいた部分です。

 

ドットインストール PHP入門
(1) PHP利用の準備

 

(2) 構造プログラミングの基礎知識

 

(3) オブジェクト指向プログラミングの基礎知識

 

(4) その他、Webサイト作成一般的知識

 

(今回は、PHPの準備、PHPの基本文法理解までで終わってしまったorz

URLリンク10個以上貼ると、日記が書き込めないみたいなので、増田では記事を分割せざるを得ない。)

次回は、OOP関係している内容(#18~#24)を一緒に確認してみよう。

 


anond:20181015215004経験からプログラマーなんだが全然からない

anond:20181016015826 増田プログラマー養成講座 その1 パソコンの用意

anond:20181016164341 増田プログラマー養成講座 その2 プログラムデータ+処理、プログラム言語の種類

anond:20181016180059 増田プログラマー養成講座 その3 構造プログラミングの基本(順次、反復、分岐

anond:20181016193144 増田プログラマー養成講座 その4 子ども向け教材「Scratch」で構造プログラミング練習

anond:20181017161003 増田プログラマー養成講座 その5 オブジェクトとは何か?

anond:20181017191404 増田プログラマー養成講座 その6 OOPの種類、PHPの準備

anond:20181019181549 増田プログラマー養成講座 その7 OOPの仕組み(前半)

anond:20181020230044 増田プログラマー養成講座 その8 OOPの仕組み(後半)

増田プログラマー養成講座 その5 オブジェクトとは何か?

今回は、手続プログラミングの後半となる「オブジェクト指向プログラミング」(OOP)について学ぼう。

OOPは内容が多いので数回に分けて説明してみます。(説明が下手だったらフォローお願いしますw)

 

オブジェクトとは何か?

オブジェクトobject)はオブジェクト指向プログラミングにおいて、プログラム上の手続きの対象抽象化する概念である

 

オブジェクト指向プログラミングパラダイムでは、関連するデータを束ね、代入、演算手続き(関数メソッドなど)を介した受け渡しといった操作対象にでき、またメッセージ受け手になれる実体オブジェクトと呼ぶ。

多くの場合オブジェクトは他のオブジェクトを要素として格納することができ、複雑なデータ構造表現できる。

 

Wikipedia説明は分かりづらいね。(初心者だったときの私が読んだら意味理解できないと思う)

 

増田プログラマー養成講座 その2 https://anond.hatelabo.jp/20181016164341説明した「プログラム構成要素」を思い出して下さい。

プログラムは、

  1. データ
  2. 「処理」

の2つから成り立っている。

プログラミング歴史は、この「データ」と「処理」をどうやって使いやすくするか?の試行錯誤になってる。

 

Java入門書にも、データ構造について説明があっただろ?

 

構造体の発展=オブジェクト

複数データをまとめて入れておく箱は便利な道具なので、だいたいどのプログラミング言語でも用意されている。

この講座では、複数データをまとめて入れる箱を「構造体」と呼ぶことにしよう。

 

構造体の各箱には、普通データ」を入れておくんだけど、データだけじゃなくて「処理」も入れておけると便利だ。

データ」も「処理」も保管できるように拡張した構造体に、「オブジェクト」という名前を付けた。

オブジェクトとは、言い方を変えれば、「データ」に「処理」をくっ付けたものなんだ。

 

このWebページ最初の方に「図: オブジェクトフィールド(データ)とメソッドを一つにまとめたもの」という説明図があるだろ?

この図で、オブジェクトの中に、いくつか箱があるけど、

なんだ。

オブジェクトそれ自体特別ものじゃなくて、ただの箱でしかない。データ構造一種であることが分かっただろうか?

今の段階では、難しく考えなくていい。

ややこしくなるのはこの後だ。オブジェクトを使うときに「なんでそんな使い方するの?」という段階になってからだ。(気を緩めないように、ちょっと脅しておこうw)

 

クロージャ

が「オブジェクト」なら、その反対に、

もあるんじゃないか?と思ったそこのキミ。正解!

「処理」に「データ」をくっ付けた仕組みもあって、「クロージャー」と呼ばれてる。

 

クロージャ(closure)、関数閉包はプログラミング言語における関数オブジェクト一種

いくつかの言語ではラムダ式無名関数で実現している。

引数以外の変数を実行時の環境ではなく、自身定義された環境(静的スコープ)において解決することを特徴とする。

関数とそれを評価する環境ペアであるともいえる。

オブジェクトインスタンス変数とは、オブジェクトインスタンスではなく関数の呼び出しに束縛されているという点で異なる。

この説明文読んで、クロージャーの仕組みがスパッと理解できる初心者っていねーだろ?(いたらビビるw)

Wikipedia説明は「何言ってるか分かんない」状態だけど、サンプルを動作させてみれば、仕組みは簡単に分かります

 

第1級オブジェクト

ここまでの説明で、「プログラミング言語は、機能自由拡張できる」と分かっただろう。

から、「データ」と「処理」の扱い方を工夫する歴史の中で、「オブジェクト」という仕組みを閃いちゃった奴がいたんだねw

 

オブジェクトの特徴をもう一度振り返ってみよう。

普段は「データ」をぶち込んでおく箱の集合体に、処理も入れられるように改造しちゃったのが「オブジェクト」だったね?

…ってことは、処理とデータ水と油みたいに別々のものじゃなくて、実は処理もデータと同じように扱えるものだってことになるよね?

そうなんです!

実は「データ」と「処理」は全然別なものじゃなくて、同じようなものとして(扱おうと思えば)扱えるんです!

それで、このデータとして扱えるような「処理」に名前を付けてあげて、「第1級関数」とか「第1級オブジェクト」と呼んでます

(「第1級データ」という呼び名が使われてないのは、データデータとして扱えるのは当然なので、わざわざ第1級データという呼び名を付ける必要がないから)

 

第一オブジェクトファーストクラスオブジェクト、first-class object)は、あるプログラミング言語において、たとえば生成、代入、演算、(引数戻り値としての)受け渡しといったその言語における基本的操作制限なしに使用できる対象のことである

ここで「オブジェクト」とは広く対象物・客体を意味し、必ずしもオブジェクト指向プログラミングにおけるオブジェクト意味しない。第一オブジェクトは「第一データ型に属す」という。

言語によって異なるが、第一オブジェクトは概ね次のような性質もつ

上記説明文の中で「制限なしに使用できる」って部分が重要

 

第一関数(first-class function、ファーストクラスファンクション)とは、関数第一オブジェクトとして扱うことのできるプログラミング言語性質、またはそのような関数のことである

その場合その関数は、型のある言語では function typeなどと呼ばれる型を持ち、またその値は関数オブジェクトなどになる。

具体的にはプログラムの実行時に生成され、データ構造に含めることができ、他の関数引数として渡したり、戻り値として返したりすることのできる関数をいう。

上記説明文の中で「データ構造に含めることができ、」って部分が重要

 

フリーパスでどこでも入れちゃうVIPみたいだからファーストクラス(第1級)と称されてるんだね?

ドラえもんの「オールマイティーパス」を持ってる奴みたいなのが、「第一オブジェクト」「第一関数」ってわけ。

ドラえもんオールマイティーパスは、どこでも入れる通行証です。

これを係員に見せるだけで、どんな交通機関でも無賃乗車できて、どんな有料施設でも無料入場できます

通常なら入ることの許されない立ち入り禁止区域でさえ入れます

 

 

オブジェクトまとめ

 

混乱するようなら、上記説明で、クロージャー以降の話はとりあえず無視してください。

 

参考

オブジェクト説明をどうしようか?と考えるとき、参考にしたページも紹介しておきます

 

 

次回、オブジェクトの使い方=オブジェクト指向プログラミングについて学びましょう。

 


anond:20181015215004経験からプログラマーなんだが全然からない

anond:20181016015826 増田プログラマー養成講座 その1 パソコンの用意

anond:20181016164341 増田プログラマー養成講座 その2 プログラムデータ+処理、プログラム言語の種類

anond:20181016180059 増田プログラマー養成講座 その3 構造プログラミングの基本(順次、反復、分岐

anond:20181016193144 増田プログラマー養成講座 その4 子ども向け教材「Scratch」で構造プログラミング練習

anond:20181017161003 増田プログラマー養成講座 その5 オブジェクトとは何か?

anond:20181017191404 増田プログラマー養成講座 その6 OOPの種類、PHPの準備

anond:20181019181549 増田プログラマー養成講座 その7 OOPの仕組み(前半)

anond:20181020230044 増田プログラマー養成講座 その8 OOPの仕組み(後半)

2018-10-16

増田プログラマー養成講座 その4 子ども向け教材「Scratch

今回は、子ども向けプログラミング学習教材「Scratch」(スクラッチ)を使って、一番簡単構造プログラミング手法を学んでみよう。

 

Scratchとは何か?

Scratch (スクラッチ) は、MITメディアラボが開発したプログラミング言語学習環境である

初心者最初に正しい構文の書き方を覚えること無く結果を得られる、遊び心のある実験インタラクティブアニメーションゲームなどの製作を通してさらなる学習のやる気を起こさせることを意図している。

 

 

タイルプログラミングとは何か?

プログラムのパーツをブロックで並べて、プログラムを作る方法

スクラッチタイルプログラミング一種

プログラミング視覚的に理解やすいので、初心者お勧めです。

 

オンライン版のScratch

スクラッチオンライン版とオフライン版がある。

ここではインストール不要で、ブラウザー上で動作するオンライン版を使ってみよう。

(※オフライン版を使いたい場合は、「Scratch インストール」で検索すれば、インストール方法が紹介されている。)

 

構造プログラミングのパーツを並べてみる

順次(上から下へ並べた順番に処理を実行していくこと)

10歩動かす」などのパーツを上から下へ順番に並べてつなげればOK

 

反復

オレンジ色の「制御」のところにある「10回繰り返す」というパーツを使えばOK

Javaの「for」に相当する機能

 

分岐

オレンジ色の「制御」のところにある「もし[ ]なら」というパーツを使えばOK

Javaの「if」に相当する機能

 

スクラッチの遊び方

Scratch 使い方」で検索すれば、スクラッチの使い方がいろいろ紹介されている。分かりやす記事YouTube動画を探して、いろいろ練習してみよう。

 

参考書

Amazon.co,jpで「本 Scratch」を検索すれば、いろいろ参考書が出てくる。

日本Scratch第一人者と言えば阿部和広先生だろう。とりあえず彼の本を読めばScratchの使い方は理解できるはずだ。

 

まとめ

 

以上で、構造プログラミングの基本である順次」「反復」「分岐」の使い方が理解できた。

次回は、手続プログラミングの後半であるオブジェクト指向プログラミング」を学習してみよう。

 


anond:20181015215004経験からプログラマーなんだが全然からない

anond:20181016015826 増田プログラマー養成講座 その1 パソコンの用意

anond:20181016164341 増田プログラマー養成講座 その2 プログラムデータ+処理、プログラム言語の種類

anond:20181016180059 増田プログラマー養成講座 その3 構造プログラミングの基本(順次、反復、分岐

anond:20181016193144 増田プログラマー養成講座 その4 子ども向け教材「Scratch」で構造プログラミング練習

anond:20181017161003 増田プログラマー養成講座 その5 オブジェクトとは何か?

anond:20181017191404 増田プログラマー養成講座 その6 OOPの種類、PHPの準備

anond:20181019181549 増田プログラマー養成講座 その7 OOPの仕組み(前半)

anond:20181020230044 増田プログラマー養成講座 その8 OOPの仕組み(後半)

増田プログラマー養成講座 その3 構造化=順次、反復、分岐

それではさっそく、一番簡単手続プログラミング言語の使い方を学んでみよう。

 

今回学ぶこと

 

順次」「反復」「分岐

構造プログラミング」でGoogle画像検索すると、分かりやすそうな図があった。

 

  1. 順次:上から下へ向かって、処理を並べた順番に実行していく動作
  2. 反復:同じ処理を決められた回数や、一定の条件の間繰り返す動作。→プログラムでは「for」「while」などで書く。
  3. 分岐:条件によって、別の処理を行う動作。→プログラムでは「if」「switch」などで書く。

 

買物のメモ

買物を例に挙げて、「順次」「反復」「分岐」の3つの動作を使ってみよう。

  1. 順次:(1)スーパーマーケットに行く。(2)カゴを持つ。(3)売り場に行く。(4)商品をカゴに入れて、最後レジで精算する。
  2. 反復:(4)牛乳を1本取る。これを3回繰り返して、カゴに3本入れる。
  3. 分岐:(5)卵が特売で150円未満だったら買う。150円以上なら買わない。

このように構造プログラミングは、人間動作と同じだ。やることをズラズラ書いていけばいいだけだ。

 

準備

要件定義

プログラム目的をハッキリさせておこう。

「最低限これだけはないとダメ」という項目を箇条書きにしておこう。

買物プログラムなら、

などが必要だろう。

 

フローチャート

単純なプログラムだと処理が少ないので混乱しないが、複雑なプログラムだと処理が多くて混乱するだろう。

あらかじめ、処理を図に書き出しておくと混乱せずに済む。その図が「フローチャート図」だ。(フローチャート図の書き方は自分で分かりやす説明検索してみてくれ。説明省略)

 

実務では納品時の成果物としてフローチャート図の提出を求めらていなければ、面倒なので作る必要はない。自分のための図なら、ノートにチャチャっと落書き程度に流れ図を描けば十分だろう。

 

疑似コード

フローチャート図を基にして、実際のコードを書く前に、人間言葉で「疑似コード」を書いてみよう。

 

擬似コード(pseudocode)とは、アルゴリズムなどを、架空の非常に高水準なプログラミング言語(擬似言語)で記述したものである

擬似コード:

if クレジットカード番号が有効

  番号と注文で取引をする

else

  エラーを表示する

end if

 

計画ができあがったら、詳細を考えます

個人的に最良だと思う方法は、プロジェクトの各パートにおいてなにが求められるのかを具体的に書き出すことです。

このとき、まだコードを書かずに言葉だけで記述するのがカギです。

これはpseudocode(疑似コード)と呼ばれます

pseudocodeなら構文を気にすることなく、プロジェクト動作だけに思考を集中できます

 

カウントダウン時計場合なら、書き出した内容は次のようになるでしょう。

 

内容を書き出したら、次は以下のように、各パートごとに小さく分解していきます

いったんロジックを書き出してしまえば、コードを書くのが格段に楽になります

 

要するに「擬似コード」とは、人間意味が分かる言葉コードっぽいものをあらかじめ書いておき、後でそれを具体的なプログラムコードに書き換えていく方法だ。

いちいち面倒だけど、最初慣れないうちは、こうすれば間違えにくいだろう。

 

文芸プログラミング

擬似コードと似た方法として「文芸プログラミング」という方法もある。

面倒なので実務では使わないが、このような補助的手段もある、と紹介しておく。

 

アノテーション

Java関係する点で考えると、Javaには「アノテーション」(注釈)という機能がある。

プログラムに「注釈」となる記述をちょこっと書いておくと、プログラム動作について細かな指示が出せる機能だ。(学習が進んでから、後で「Java アノテーション」を検索して学んでみよう)

 

次回は、子ども向けプログラミング教材「Scratch」を使って、実際に構造プログラミングの3つの動作練習してみよう。

 


anond:20181015215004経験からプログラマーなんだが全然からない

anond:20181016015826 増田プログラマー養成講座 その1 パソコンの用意

anond:20181016164341 増田プログラマー養成講座 その2 プログラムデータ+処理、プログラム言語の種類

anond:20181016180059 増田プログラマー養成講座 その3 構造プログラミングの基本(順次、反復、分岐

anond:20181016193144 増田プログラマー養成講座 その4 子ども向け教材「Scratch」で構造プログラミング練習

anond:20181017161003 増田プログラマー養成講座 その5 オブジェクトとは何か?

anond:20181017191404 増田プログラマー養成講座 その6 OOPの種類、PHPの準備

anond:20181019181549 増田プログラマー養成講座 その7 OOPの仕組み(前半)

anond:20181020230044 増田プログラマー養成講座 その8 OOPの仕組み(後半)

増田プログラマー養成講座 その2 プログラムデータ+処理

プログラムとは何か?

プログラムは、コンピューター電子計算機)に与える指示書のこと。

人間プログラムコード)を書いてコンピューターに与えると、コンピュータープログラムに書かれている命令を実行する。

 

コンピューター電気仕掛けの召し使いだ。いくらコキ使っても誰にも文句を言われない。パソコンを10台持っていれば部下が10人いるようなもの。こいつらに仕事やらせれば人間様は遊んで暮らせる。どうだ?命令してみたくなっただろう?

しかし、こいつらはアホだ。正確に命令を出さないと、ほんの少しでも間違っていれば、間違ったなりの動作しかしない。融通が利かない頑固者だ。命令するときバグ(間違い)がないように注意しよう。(命令するのも一苦労なんだよな~w)

 

プログラム構成要素

プログラムは、

  1. データ
  2. 「処理」

の2つから成り立っている。それ以外の要素はない。基本はたったの2つだけなら、シンプルで分かりやすいだろ?

 

問題は、この「処理」をどうやって書くか?なんだ。

「処理」の書き方を巡って、人類試行錯誤を繰り返し、いろんな書き方を編み出して来た。

現代の主な書き方(プログラミングパラダイム)には、主に2つの流派がある。

 

命令型と宣言

  1. 命令プログラミング - Wikipedia https://ja.wikipedia.org/wiki/%E5%91%BD%E4%BB%A4%E5%9E%8B%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0
  2. 宣言プログラミング - Wikipedia https://ja.wikipedia.org/wiki/%E5%AE%A3%E8%A8%80%E5%9E%8B%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0

 

さらに細分化すると4つある。

  1. 手続型:C、Javaなど
  2. 関数型:LispHaskellなど
  3. 問合型:SQL
  4. 論理型:Prolog

 

手続型は命令型に属する。関数型、問合型、論理型は宣言型に属する。)

これら4つは見た目がちょっと違うけど、「チューリング完全」と言って、計算できることは同じと保証されている。(同じ計算能力がある)

頭の悪いプログラマーはそれぞれの優劣を論じて宗教戦争をやってるけど、賢いプログラマー必要に応じて全部使えるようにしているので、どれを使っても問題ない。

まずは、直観的に分かりやすい「手続型」で練習してみよう。その後、問合型(データベースの操作)、関数型(参照透過性の活用)を練習してみよう。


(ここまでの話は、歴史用語、全体を俯瞰した地図の話だから、今の段階で理解できなくてもOK

 

手続プログラミング言語学習項目

次の2ステップに分けられる。

  1. 構造プログラミング - Wikipedia https://ja.wikipedia.org/wiki/%E6%A7%8B%E9%80%A0%E5%8C%96%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0
  2. オブジェクト指向プログラミング - Wikipedia https://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0

 

この2点を理解したら、Javaコードを書ける。

次回、この2つを見てみよう。

 


anond:20181015215004経験からプログラマーなんだが全然からない

anond:20181016015826 増田プログラマー養成講座 その1 パソコンの用意

anond:20181016164341 増田プログラマー養成講座 その2 プログラムデータ+処理、プログラム言語の種類

anond:20181016180059 増田プログラマー養成講座 その3 構造プログラミングの基本(順次、反復、分岐

anond:20181016193144 増田プログラマー養成講座 その4 子ども向け教材「Scratch」で構造プログラミング練習

anond:20181017161003 増田プログラマー養成講座 その5 オブジェクトとは何か?

anond:20181017191404 増田プログラマー養成講座 その6 OOPの種類、PHPの準備

anond:20181019181549 増田プログラマー養成講座 その7 OOPの仕組み(前半)

anond:20181020230044 増田プログラマー養成講座 その8 OOPの仕組み(後半)

増田プログラマー養成講座 その1 パソコンの用意

自宅と会社プログラミング環境(機材、ソフトなど)を教えて?

 

(例)

自宅:パソコンを持ってない。スマホiPhone7)のみ。

会社パソコンスペックOSCPUメモリHDDの容量、モニター画面の大きさと台数)、ソフトエディタIDE)、机の広さ、椅子の種類、など。

 

パソコンを持ってなければ、とりあえずヤフオクメルカリで安い中古ノートパソコンでも調達しよう。

お勧めパナソニックレッツノートデザイン無骨だけど丈夫で壊れにくい。売れてるので中古市場でも数が多い=選びやすいよ。)

 


anond:20181015215004経験からプログラマーなんだが全然からない

anond:20181016015826 増田プログラマー養成講座 その1 パソコンの用意

anond:20181016164341 増田プログラマー養成講座 その2 プログラムデータ+処理、プログラム言語の種類

anond:20181016180059 増田プログラマー養成講座 その3 構造プログラミングの基本(順次、反復、分岐

anond:20181016193144 増田プログラマー養成講座 その4 子ども向け教材「Scratch」で構造プログラミング練習

anond:20181017161003 増田プログラマー養成講座 その5 オブジェクトとは何か?

anond:20181017191404 増田プログラマー養成講座 その6 OOPの種類、PHPの準備

anond:20181019181549 増田プログラマー養成講座 その7 OOPの仕組み(前半)

anond:20181020230044 増田プログラマー養成講座 その8 OOPの仕組み(後半)

2018-10-13

プログラミングの独学プラン

  1. 10日間:「構造プログラミング」の基本(順次、反復、分岐)を学習子ども向けの教材「Scratch」がお勧め https://scratch.mit.edu/
  2. 60日間:手続言語PythonPHP等)を学習Webサイトを作ってみる→スラスラわかるPHP https://www.amazon.co.jp/dp/4798125806/
  3. 30日間:問合型言語データベースSQL)を学習MySQLを使ってみる→おうちで学べるデータベースのきほん https://www.amazon.co.jp/dp/479813516X/
  4. 30日間:関数型言語(合成、再帰パターンマッチ)を学習ポイントは「参照透過性」の活用。教材は「OCaml」がお勧め http://pllab.is.ocha.ac.jp/~asai/book/Top.html

 

 

からないことがあればteratailで質問できますhttps://teratail.com/

 

追記

プログラミング言語の選定は、作りたいものに応じて選ぶのが基本。学習目的なら、とりあえず最初の1歩には以下の言語お勧めします。

  1. 手続言語Python
  2. 問合型言語SQL
  3. 関数型言語OCaml
  4. 論理言語Prolog

 

参考書

 

anond:20181013190413 プログラミングってやっぱり数学知識いるかな?

anond:20181014003945 プログラムを学びたい

anond:20181015215004 未経験からプログラマーなんだが全然からない

2018-10-12

趣味読書です」

趣味読書です」(一般小説)→(恋愛ミステリ児童文学などに分岐がある可能性も)

趣味読書です」(マンガラノベ)→(青年誌少年誌女性誌系・萌え系へ分岐

趣味読書です」(政治ビジネス系)

趣味読書です」(上記以外…図鑑・生き物・鉄道など)

 

どんな読書かも言って~~~~~~~~~

2018-10-11

anond:20181011004620

量子力学では「現実をぼやっとした確率の雲のようにしか捉えられない」、しかしこの雲、当たり前だが「人間が実際に見ているのは確率ではなく一つの事実」これをどう解釈するかでSF感ある話に突入する

『一つの事実観測した瞬間に他の全ての可能性が消える』のがコペンハーゲン解釈

『一つの事実に定まった時、他の世界分岐している』のが他世界解釈

とりあえず今の学問では、未来計算で決定できないことになっているのでめんどくさい話になります

けっきょくのところ、未来ってひとつなの?

未来収束してひとつだけの線 → シュタインズゲート世界観

未来分岐して複数の線 → ドラゴンボール世界観

けっきょくのところ、どっちのほうが正しい可能性が高いんだろうか

2018-10-07

anond:20181007022312

まあツリー最初を読んでくれ。本当に知りたいのは労働問題における搾取についてではなく、性的搾取という言葉を使ってる人たちがどんな定義で使ってるのかって話であって、なんていうか細かいところから水が流れて違う分岐に話がきてる。

「人が死ぬ」ということ

社会問題を語るとき、「人が死ぬ」話がよく出る。

最近なら北海道停電医療機器が止まって子どもが死んだ、って話から原発必要性を語るツイートがたくさんあった。児童虐待子どもが死んでどうのこうの、という話もあったと思う。

「人が死ぬ」ことは一般的に、絶対に避けないといけないことだとされている。貧困餓死したら、事故死したら、停電生命維持装置が止まって死んだら、全てはいけないことであり、対策検討される。

これ自体はまさに人類人類として生きるための叡智であり、その歩みを止めてはならない。

しかし一方で、そのあまりにも正しすぎる道徳は、往々にして議論無意味にする。

前に出したように、原発を動かさないと人が死ぬ、電力不足は人を殺すのだ、と主張が一時期大いになされた。もちろん道徳的で非常によい意見だ。だが現実的ではない。

現代のようなある程度人権が確保され、安定した平和世界では、「◯◯をしないと人が死ぬ」という意見は、「我々には関係ない人が死ぬようにしろ」と同意なのではないかと思う。

世界が、社会がどんどん安定して簡単には人が死ななくなった結果、1人を救うリソースインフレしているのではないか。残念ながら人類リソースは有限であり、強引にリソースを増加させる行為は別の人を殺す。

話を戻すと、電力不足は確かに人を殺すだろう。だが、現代社会において電力不足の解消が救う命は、解消のために費やしたリソースのために死ぬ人より多いのだろうか。

そうしたとき、「◯◯をしないと人が死ぬ」=「◯◯をして人を助けろ」という意見は、「死ぬべき人はこの人ではない、別の人だ」=「他の誰かを犠牲しろ」に容易に置き換わる。もちろん、人類道徳大事にするので、表立って他人犠牲しろとは言わない。言わないが、やっていることが同じだとすれば、鬼畜所業と言えるだろう。

我々は表立って言わなくとも、社会のために、もっと言えば自分のために、常に誰かを犠牲にしている。もちろんそれは巧妙に隠され、少なくとも日常的に出会ものではない。

だが社会問題を語るとき、そこから目を背けることはできないはずだ。目を背けるべきでないにも関わらず強引にそれをすれば、我々には見えない生贄を際限なく増やすだろう。

私は、不完全な人類社会において、人が死ぬことは仕方ないと思う。だが、それがなぜ仕方ないのか、我々は正しい生贄を選んでいるのか、そして生贄をどう選ぶか、というトロッコ問題に悩み続けなくてはいけない。

無限にある分岐先のうち、どこで何人の人を跳ねるかなんて問題に正解があるわけがない。だが、自分の気に入った人を殺したくないとトロッコをどこかに追いやって満足する人間が、私は死ぬほど嫌いだ。それは間違っている。

私は死ぬべき人が死ぬべきだと思っている。線路ポイントを切り替えるべきではないと思っている。どうしても切り替えたいのなら、相応の覚悟がほしい。

覚悟がない人間がひたすら無秩序ポイントを切り替え続けた結果の世界が、今よりいい世界だとは絶対に思えないからだ。

2018-10-04

いまの地震で生き残ったあなた

先ほどの地震世界分岐しました

いまあなたがいる場所茨城県震度4地震が起きた世界です

実は首都直下地震南海地震富士山阿蘇山噴火イエローストーン国立公園噴火宇宙人襲来と自転の停止が起きて地球は壊滅しているのですが

磁場が乱れた狭間に、あなたは入り込みました

以後、あなた以外の人間NPC担当しま

それでは一人だけの世界をお楽しみください

2018-10-02

車ですれ違うのがなぜか苦手。

うちの周辺ではなぜか逸れた方の道?に対向車が近づいてきて結局すれ違うことになる。

今日もそれですれ違いになりそうだったから途中でバックして最初分岐に戻ろうとしたら畦に落ちそう(田舎であるので)になって焦ってしまった。

人が避けた方角へ来るのやめてほしい、本当に。

2018-09-25

ゲーム善悪プレイ自由度

思うに善ルートルートとかは結局ルート分岐であって自由度じゃない

行き来できること、悪落ちや更生できることが自由度だろう

メモ

2018-09-22

anond:20180921233031

php文法は良くわからんけど。

1の場合、2の場合、3の場合って分岐させているif文がelseifになってないのが原因かと。

2018-08-24

昭和天皇太平洋戦争は止められたか

神様に、昭和元年の誰かに転送させてやるから太平洋戦争を止めてほしい、って言われたら誰選ぶ? 昭和天皇チートレベル簡単だと思うんだけど。陸軍を抑えるのは必須だけど、石原莞爾とかは暗殺エンドと失脚エンドへの分岐が多すぎて、初見クリアするのは無理そうな気がする。閑院宮は、失脚エンド多そう。

2018-08-22

万引き犯はどんどん警察通報すべき

元増田創作かどうかはともかく、世間が誤解してるかもしれないことについて書く

https://anond.hatelabo.jp/20180821175309

万引き犯通報しても、人生は壊れない

(1) 最終的な処分の見込み

未成年万引き犯警察通報したときにどうなるか。

最初問題は、その少年(※1)が逮捕されるか否かである

少年(ら)が犯行を認めている、②初犯、③被害金額が少額、④家庭環境に重大な問題がなく、身元引受け人がいる、などの典型的なケースの場合逮捕される可能性は極めて低い。

なので、このような場合逮捕されて人生が狂う、ということは考えにくい。(※2)

逮捕されない場合少年は自宅に返され、身柄が自由状態警察捜査をすることになる。

その後、事件家庭裁判所送致され、処分の有無等が決まることになる。

このとき結論には、主要なものでいえば、①処分されない、②保護観察処分、③少年院などがある。

結論の内容を決めるのは、犯罪の重大性や少年の家庭環境である

上記典型的な例でいえば、まず③少年院ということはなく、①処分されない可能性が高く、されたとしても②保護観察処分だろう。

保護観察は、定期的に保護司のもとに通うなどするもので、少年院と違って身柄を拘束されたりはしない。

以上のように、万引き犯通報しても、最終的な処分が極めて重いものになるというのは、例外的場合である

(後述のように、その例外的場合においては、重い処分をした方が少年のためになり得る。)

(2) 前歴の扱い

万引き犯通報されて捜査されたことは、警察に記録され、少年の前歴となる。

もっとも、前歴が就職活動で聞かれることは極めてまれであり、ほかに前歴があることで特に非常に不利益があるということもない。

警察家庭裁判所の関与が少年の更生につながることがある

万引きが発覚しても警察通報されないと、少年は、犯罪を軽く考え、その後も犯罪を繰り返す可能性がある。

また、少年の心身や家庭環境に重大な問題があり、公的機関の関与が必要なことが、万引き犯通報で発覚することもある。(※3)

そのような場合において、通報しなかったときには、問題の発覚・手当てが遅れることになっただろう。

また、前述の処分については、教育心理専門家が関与して少年の更生に適した処遇を考えることになる。

3 終わりに

上記のとおり、万引き警察にどんどん通報すべきである

少年法は、少年を罰して苦しめる仕組みではなく、少年を更生させ、その未来を明るくするための法律なのだ


※1 男女は問わない

※2 なお、逮捕される場合は、その後、勾留されるか、観護措置がとられる(鑑別所に入ることになる)か、などの分岐がある。

観護措置までいくと、約1ヶ月、身柄を拘束

されることになるので、それなりに不利益ではある。

もっとも、そこまでいくのは、それなりの事件であり、その不利益を受けても、少年問題点の発見改善をした方が良いと言える場合も多い。

鑑別所に入ると人生が狂う、とまでは言えないだろう。

※3 極端な例としては、少年の心身の問題点が極めて重大であり、少年院で教育しないと改善できない、という場合がある。

このような場合問題点を放置し、少年が成人になってから犯罪を犯したとすると、前科がついてしまうため、少年院に入れることが少年のためになり得る。

2018-08-17

anond:20180817105012

linuxから分岐したプロダクトなのに突然どこかでプロプライエタリになったらペンギン集団でついばみにくるだろ。そういうことや。

分岐前の規約は最低限守れ。

anond:20180817104420

雪ミクって初音ミクから分岐したなにかなのか初音ミクゴースト的に同一個体なのか正にインスタンスクローンなのか未だに扱いを知らんのだな。

その辺お前らの中ではどういう扱いになっとるん?

2018-08-10

anond:20180810161602

プログラム動作パターンtrue/falseの2分岐だけで表現できるとは限らないってだけの話に

「2値論理ではなく3値論理必要」とかSQLの型にはnullがあるとか「現実世界の正確なモデリング」とか言い出してたのかよ

マジめんどくせーな

2018-07-31

フレームアクセスしようとするとクロスオリジンフレームって出る

ローカル上でテストしてる。

IE特に問題なし。子フレームからフレーム情報を取得し操作できる。

Chrome→Uncaught DOMException: Blocked a frame with origin "null" from accessing a cross-origin frame.

at window.onload

やりたい事としては、親フレームに書いてあるIDの横のチェックボックスの状況を確認

チェックの入った指定IDの内容のみiframeに表示したいんだ。

IEだと出来るのにChromeだと出来ないって解せない。

チェックリスト分岐させて結果が変わる奴作りたいんだよ。

同じ部分もあるからそのまま利用したい箇所もあるから、表示非表示変更で行きたいんだ。

window.onload = function() {
var parentDocument=window.parent.document;

var TEST = parentDocument.getElementById("r1").checked;

	if (TEST){
			alert("TEST");
			document.getElementById("NEXT").style.display ="none";
			}

}
}

例として、ID=TESTID=NEXTの2つが子フレームに表示されている。

うーん、分からん

アーカイブ ヘルプ
ログイン ユーザー登録
ようこそ ゲスト さん