「インスタンス」を含む日記 RSS

はてなキーワード: インスタンスとは

2018-12-13

脳内遊戯王カードを作ってる

毎晩、寝る前に自分遊戯王で一番好きなカードD-HERO ダイヤモンドガイ」と相性が良いカードを頭の中で作ってはVジャンプに基本紹介的に書かれるようなコンボレビューしている。

 

D-HERO ダイヤモンドガイ」のテキストこちら。

効果モンスター

星4/闇属性/戦士族/攻1400/守1600

(1):1ターンに1度、自分メインフェイズに発動できる。

自分デッキの一番上のカードをめくり、

それが通常魔法カードだった場合、そのカード墓地へ送る。

違った場合、そのカードデッキの一番下に戻す。

この効果で通常魔法カード墓地へ送った場合

次の自分ターンのメインフェイズ

墓地のその通常魔法カードの発動時の効果を発動できる。

 

からない人に説明すると、遊戯王カードの「通常魔法カード」という他のゲームでいう呪文スペル)とかインスタンスかいもので、基本的には「コスト」を払って「効果」を得る。(もちろんノーコストのものもある。)

ダイヤモンドガイはこの「コスト」を踏み倒して「効果」だけを得るぶっ壊れカードで、これに魅せられた私は、遊戯王をすでにやっていないにも関わらず、遊戯王Wikiで通常魔法カードだけをみてダイヤモンドガイが確実に出来ることが増えるのを楽しみにしている。

でも、物足りない。

D-HERO ダイヤモンドガイ」というのは、2006年だったかに出た。その時の主人公ライバルとして出てきたエドフェニックスCV石田彰)が使うモンスターとして出てきたのが「D-HERO ダイヤモンドガイ」だ。

当時の友達は「D-HERO ダイヤモンドガイってなんて馬鹿げたカードなんだ。普通に使えばいい魔法カードをわざわざ1ターン後に使う意味がない。」という意見だった。

しかし、当時の遊戯王プレイヤーは違った。自分は景品のカードが欲しくて小さいおもちゃ屋遊戯王大会に毎週通っていた。

そこでその店のTCGオタクの長である高校生のYさん(遊戯王カードのことを聞いたら何でも教えてくれる)に「D-HERO ダイヤモンドガイ」はどう使えば良いのか?というのを聞いた。

そうして、天啓を得て、少年は「D-HERO ダイヤモンドガイ」に執着するようになる。

だが、仲間内では遊戯王公式ルールをあまり把握していないものも多く、正式な「D-HERO ダイヤモンドガイ」は増田勝手解釈として封じられることになる。

 

そうして、中学校にあがり部活に勤しむことで実際のカードを買ったり、アニメを見なくなった。

それでも、毎日のように「D-HERO ダイヤモンドガイ」のことは忘れなかった。

毎日毎日、寝る前に必ず「D-HERO ダイヤモンドガイ」はどうすればもっと活躍できるかを考える。

 

考えるパターンは主に3つだ。

1.「コスト」がおもすぎるかわりに「効果」が大きい通常魔法カード

これは単純に「D-HERO ダイヤモンドガイ」がコストを踏み倒せることに注目したカードである。これが5割を占める。

2.「D-HERO ダイヤモンドガイ」の発動をサポートするカード

まりデッキの一番上を操作する」カードであったり、相手のターンを限定的スキップして即時的に効果を得るカードである。これはバランスブレイカーになりやすいので考える事はかなり多いが採用率は1割に満たない。

3.現在召喚方法対応したダイヤモンドガイ

遊戯王シリーズを重ねる度に新しい召喚方法が出るのが遊戯王5d'sというアニメからお約束らしいので、その召喚方法に合ったダイヤモンドガイを作る。これが4割。

 

今まで考えた中でコナミ実装されたもの

リチュア・チェイン/Gishki Chain

効果モンスター

星4/水属性/海竜族/攻1800/守1000

このカード召喚成功した時、デッキの上からカードを3枚確認する。

確認したカードの中に儀式モンスターまたは儀式魔法カードがあった場合

その1枚を相手に見せて手札に加える事ができる。

その後、確認したカードを好きな順番でデッキの上に戻す。

本当にびびった。実際考えていたのは戦士族で同じカテゴリーD-HEROという名前をもたせたいたが、効果にいたっては

「このカード召喚成功した時、デッキの上からカードを3枚確認する。

その後、確認したカードを好きな順番でデッキの上に戻す。」

という感じで儀式関係が全く抜けているがほぼそのまんまだった。3枚というのも一致している。詳しくは省くが3枚はダイヤモンドガイにとって丁度いいのだ。

 

《終まりの始まり/The Beginning of the End》

通常魔法

自分墓地に闇属性モンスターが7体以上存在する場合に発動する事ができる。

自分墓地存在する闇属性モンスター5体をゲームから除外する事で、

自分デッキからカードを3枚ドローする。

当時は、「デステニー・ドロー」というカードがあり、そのカードで2枚ドローするというのが「D-HERO ダイヤモンドガイ」の主な使い方だったのだが、

3枚ドローできれば流石にみんな使うんじゃないかと思い、物凄く重いコストで、3枚ドローを何個も考えた。

そのうち一つが「終わりの始まり」にそこそこ近く、考えていたのは「墓地の5枚のD-HEROデッキに戻して3ドロー」という「墓地を参照して墓地コストで3ドロー効果だった。これは貪欲な壺というカードD-HERO限定版だから3ドローしてもいいだろうという判断だったが、後にこういう効果にすると「墓地の5枚のD-HEROデッキに戻し」はコストではない判定になるので無理だということを知ることになる。

anond:20181213113214

こっちも割とプロから、そういうイキリボーイたちに「おっ、詳しいね。ならこのサーバハッキングしてみてよ」みたいなこと言ってガチで自分awsインスタンスIP差し出すとかしたいんだけど、イキリボーイらが反則行為してくるのが見えてるのでそういうの出来なくてねえ。

なんかそういうイキリボーイ達を黙らせるイベント興せねえかなあ。

2018-11-29

問題

増田君はAWSログインをしていたところ、月初付近テスト作成したp3.16xlargeのオンデマンドインスタンス複数台電源on状態放置されているのを目撃した。この後増田君がしなければいけない行動は何か?

2018-11-04

増田プログラマー養成講座 その17 Webアプリの骨組み

前回は、Webアプリの完成見本を先に見てみました。

今回は、Webアプリを作る途中の過程を見て、作る雰囲気を一緒に味わってみましょう。

 

フレームワーク使用ルール=「設定より規約」=手抜きをする仕組み

最近フレームワークは、「設定より規約」(CoC、convention over configuration)という発想で作られている。

フレームワーク規約使用ルール)に従うと、プログラマー作業量が減って、楽ができる。

 

設定より規約(convention over configuration)とは、開発者の決定すべきことを減少させ、単純にするが柔軟性は失わせないというソフトウェア設計パラダイム

使用しているツール実装した規約開発者の望む動作と一致していれば、設定ファイルを書く必要もない。実装規約と望みの動作が違っている場合必要動作を設定しなければならない。

 

最近フレームワークは「設定より規約アプローチ採用しているものが多い。

例えば、Ruby on Rails、Kohana、Grails、GrokZend FrameworkCakePHPSymfony などがある。

 

CodeIgniter使用ルール

CodeIgniter使用ルールは、マニュアルチュートリアル確認できる。

↑このページの「アプリケーションフローチャート」を見てみよう。

 

  1. 一番左の「index.php」が、Webアプリ入口になっている。(エントリーポイントフロントコントローラーパターン等ともいう)
  2. から2番目の上段「Routing」で、URLに応じて、仕事の振り分け先を決定する。(ディスパッチ、マッピングルーティング等ともいう)
  3. から4番目の「Application Controller」で、具体的な処理の指示を出す。
    1. Application Controllerは、「Model」に必要データを用意させる。
    2. Application Controllerは、「View」に表示用の画面を作らせる。
    3. Application Controllerが、index.phpに表示用の画面を渡す。
  4. 表示用の画面(最終的な処理の結果)を受け取った「index.php」は、ユーザーブラウザー)に画面を渡す。

 

 


 

それでは、CodeIgniterプログラマーが用意する部分のM(Model)とV(View)とC(Application Controller)を、骨組みから作ってみよう。

事前準備として、前々回と前回のWebアプリ完成見本を用意するところまでやっておこう。

 

スケルトンとは?

スケルトン(skeleton, 骨格)とは動物人間の骨格。

コンピュータプログラムコードの骨格部分。プログラムコード作成では、初期段階でスケルトン作成し、その後で詳細部分を肉付けしていく。

 

 

 

Application Controllerの骨組み

まずは、MVCのCの骨組みを作ろう。

Controllerは、ユーザーからリクエストを受け付けて、ModelViewに指示を出す監督です。

 

上記フォルダの中に「Welcome.php」というファイルを作る。(デフォルトであるはずなので、それを使ってOK

 

CodeIgniterルールで、Application Controllerを置く場所は「application/controllers」というフォルダになっている。

CodeIgniterルールで、一番最初に呼び出されるApplication Controllerは「Welcome.php」というファイルになっている。

→これは「C:\xampp\htdocs\waf\application\config\routes.php」という設定ファイルで決められている。

$route['default_controller'] = 'welcome'; // 別の名前にすれば変えられる。

 

「Welcome.php」の中身を以下にように変更する。

<?php

defined('BASEPATH') or exit('No direct script access allowed');

 

class Welcome extends CI_Controller

{

 // 初期画面

 public function index()

 {

  echo "Here is index()";

 }

 // 更新画面

 public function update()

 {

  echo "Here is update()";

 }

 // 削除画面

 public function delete()

 {

  echo "Here is delete()";

 }

}

これがチャットApplication Controllerとして動作する最小限の内容=骨格だ。

 

継承

class Welcome extends CI_Controller

という行に注目してみよう。

CodeIgniterで用意されてる「CI_Controller」クラス継承して、プログラマーが「Welcome」クラスを作ってる。

継承によって、フレームワークが用意してる様々な機能をWelcomeクラス内で使えるようになる。

 

URLリクエスト)とControllerの対応マッピング)のルール

「Welcome」クラスの中に、「index()」「update()」「delete()」という3つのメソッドを用意した。

CodeIgniterURLは、Action Controllerのクラス名やメソッド名とひもづけられている。

今回作るWebアプリだと、

「http://localhost/waf/クラス名/メソッド名」

という対応関係になっている。

(例)

http://localhost/waf/        →Welcomeクラスindex()メソッドが呼び出される。

http://localhost/waf/welcome/index  →Welcomeクラスindex()メソッドが呼び出される。

http://localhost/waf/welcome/update →Welcomeクラスのupdate()メソッドが呼び出される。

http://localhost/waf/welcome/delete →Welcomeクラスdelete()メソッドが呼び出される。

 

 

 

Viewの骨組み

次にMVCのVの骨組みを作ろう。

ビューは、表示する画面の部分です。HTMLWebページの構造を書きます

 

 

welcome_index.php編集

以下の内容にして保存する。

<?php defined('BASEPATH') OR exit('No direct script access allowed'); ?>

<!DOCTYPE html>

<html>

 <head>

  <meta charset="utf-8">

  <title>増田チャット</title>

  <base href="<?php echo base_url(); ?>">

 </head>

 <body>

  <h1>増田チャット</h1>

  <h2>新規投稿</h2>

 </body>

</html>

 

chat_update.php編集

以下の内容にして保存する。

<?php defined('BASEPATH') or exit('No direct script access allowed');?>

<!DOCTYPE html>

<html>

 <head>

  <meta charset="utf-8">

  <title>増田チャット</title>

  <base href="<?php echo base_url(); ?>">

 </head>

 <body>

  <h1>増田チャット</h1>

  <h2>編集</h2>

 </body>

</html>

 

chat_delete.php編集

以下の内容にして保存する。

<?php defined('BASEPATH') or exit('No direct script access allowed');?>

<!DOCTYPE html>

<html>

 <head>

  <meta charset="utf-8">

  <title>増田チャット</title>

  <base href="<?php echo base_url(); ?>">

 </head>

 <body>

  <h1>増田チャット</h1>

  <h2>削除</h2>

 </body>

</html>

 

Viewファイルの追加に合わせて、Controllerも一部変更します。

 

Welcome.php編集

<?php

defined('BASEPATH') or exit('No direct script access allowed');

 

class Welcome extends CI_Controller

{

 public function __construct()

 {

  parent::__construct();

  $this->load->helper('url');

 }

 

 // 初期画面

 public function index()

 {

  $this->load->view('welcome_index');

 }

 

 // 更新画面

 public function update()

 {

  $this->load->view('chat_update');

 }

 

 // 削除画面

 public function delete()

 {

  $this->load->view('chat_delete');

 }

}

 

(変更点の説明

コンストラクターの追加

コンストラクター「__construct()」は、クラスからインスタンスが作られるとき自動的に実行されるメソッドだ。コンストラクターは、初期化最初にやっておくべき下準備を書いておく。

$this->load->helper('url');

CodeIgniterには、リンクの表示を補助する「URLヘルパー」という機能が用意されている。

上記のように書くとURLヘルパーを呼び出して、使えるようになる。

Viewファイルの以下の行でURLヘルパーを使っている。=「base_url()」という関数URLヘルパーの1つ。

<base href="<?php echo base_url(); ?>">

 

ビュー読み込みメソッドの追加

$this->load->view('welcome_index');

というメソッドによって、Viewファイルの「welcome_index.php」を呼び出し、画面を出力します。

 

これでMVCのCとVの骨組みができた。

今の段階でWebブラウザーで各ページを表示させると、各Viewファイルの中身が表示される。

 

 

 

Modelの骨組み

次にMVCのMの骨組みを作ろう。

モデルは、具体的な処理内容(ロジック)を書いて、データを読み書きする部分です。

データベースを操作するSQL文もモデルに書きます

 

上記フォルダの中に「Chat_model.php」というファイルを作り、以下の内容にして保存する。

<?php

defined('BASEPATH') or exit('No direct script access allowed');

 

class Chat_model extends CI_Model

{

 public function __construct()

 {

  parent::__construct();

  $this->load->database();

 }

}

 

CodeIgniterで用意されてる「CI_Modelクラス継承して、プログラマーが「Chat_modelクラスを作ってる。

「Chat_modelクラスコンストラクターには、以下のように書いている。

$this->load->database();

これは、データベースを使用する準備だ。

 

Modelの追加に合わせて、さらにControllerも一部変更します。

 

Welcome.php編集

<?php

defined('BASEPATH') or exit('No direct script access allowed');

 

class Welcome extends CI_Controller

{

 public function __construct()

 {

  parent::__construct();

  $this->load->model('chat_model');

  $this->load->helper('url');

 }

 

 // 初期画面

 public function index()

 {

  $this->load->view('welcome_index');

 }

 

 // 更新画面

 public function update()

 {

  $this->load->view('chat_update');

 }

 

 // 削除画面

 public function delete()

 {

  $this->load->view('chat_delete');

 }

}

 

コンストラクター

$this->load->model('chat_model');

と書いて、「Chat_model」というモデルを読み込むようにした。

これで、モデルに用意するいろんな機能コントローラーで使えるようになる。

 

 

 

以上で、MVCの骨組み(スケルトン)だけを作成するプロセスを見ていきました。

まだ中身はスカスカで、何も機能がついてませんね。

次回は、データベースのCRUD操作を行なって、チャットメッセージを追加/取得/変更/削除する機能実装してみましょう。

 


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の仕組み(後半)

anond:20181022232327 増田プログラマー養成講座 その9 MVCフレームワークを使ってみよう

anond:20181023184616 増田プログラマー養成講座 その10 OOP参考書

anond:20181024214133 増田プログラマー養成講座 その11 データベースを使ってみよう

anond:20181026145516 増田プログラマー養成講座 その12 データベースの参考書

anond:20181028152656 増田プログラマー養成講座 その13 SQL文法

anond:20181031014212 増田プログラマー養成講座 その14 Webアプリの試作品作成

anond:20181101225335 増田プログラマー養成講座 その15 Webアプリの完成見本

anond:20181101230220 増田プログラマー養成講座 その16 Webアプリの完成見本(続き)

anond:20181104161900 増田プログラマー養成講座 その17 Webアプリの骨組み ←★今ここ★

anond:20181104233013 増田プログラマー養成講座 その18 SQLデータの追加と取得

anond:20181024214737 増田プログラマー養成講座 コンテンツ一覧

2018-10-30

グルドンIT系コミュニティの中心になり得るのか

グルドンって知っているか

知っている人は知っているIT界隈ではそこそこ有名なdrikinによって立ち上げられたMastodonインスタンスだ。

これが立ち上がった経緯はdrikinが主催しているbackspace.fmというPodcastのリスナー達とコミュニケーションするために立ち上げられたもの

何故、物凄くマイナーグルドンなんていうコミュニティ話題を出したのか?はグルドンに関わる以下の人リストを見てもらえればはてな民は興味を示し、解るかも知れない。

特定都道府県でのみ有名な人物や一部界隈で有名な人物など挙げればもっと出せるが、あまりにも数が多いので10年以上ネットウォッチしていれば一度は名を見たことがあるであろう人物を列挙した。

はてな民アイドルおちゅーんやshi3z、Appleポエマーnobi、ミクラスのGOROman、Perfumeプロデューサーのヤスタカ、150万登録Youtuberカズチャンネルとは何なんだこのメンバーは。

仲良しお友達コミュニティなのは間違いないが、はてブにはそんなこと書いてないわけで、関わっている人物を調べれば調べるほど驚いた。

しかグルドン企業支援を受けていて、さくらインターネット株式会社フェンリル株式会社というこれまた有名どころが出てくる。

グルドンアカウントを作っているユーザ層は30〜50代で20代以下の若者は非常に少ない。多くの登録ユーザYoutube動画投稿もしており顔出しに対してそこまで頓着が無いようだった。

登録者の大半が30代以上なので、ある程度収入があり生活が安定しているのか、高価なガジェットカメラの購入報告が頻繁にあり、懐古的なパソコンの話も盛り上がる傾向にある。

今どきのネットユーザTwitterInstagramかと思っていたしMastodonなんて使うのは一部のギークばかりと思っていたが、今どきじゃない中年達の手によって気付いたらこんなコミュニティが出来あがっているとは。

時代遅れおっさんのやる事には若者はついてこないというのは理解できるが、30〜50代の社会人若者に比べて発言力だけはあるのでどう転ぶかには興味が尽きない。

まだまだ新しいコミュニティって生まれるんだなぁ。

2018-10-29

というか増田ときサービスなんて

スケールアップもスケールアウトも自由自在だしそもそもAP/DB共用でメモリ8GBのインスタンス1台くらいで賄える(おそらくこれでもオーバースペック)程度のサービスだと思ってるんやが。

DDoSに堪えられない? 何をジョークいっとるんだがやって気がする。

2018-10-23

おいお前ら、今気づいたけどEC2の料金半額になってるのな。

なおさら国内VPSとかクラウドとかを選択する理由が無くなるよな。

t3.nanoとかリザーブインスタンスにしたら月300円だぞ?

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の仕組み(後半) ←★今ここ★

anond:20181022232327 増田プログラマー養成講座 その9 MVCフレームワークを使ってみよう

anond:20181023184616 増田プログラマー養成講座 その10 OOP参考書

anond:20181024214737 増田プログラマー養成講座 コンテンツ一覧

2018-10-19

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

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

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

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

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

 

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

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

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

 

ドットインストール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メソッドで「タロウ」という名前を設定せよ

等という操作ができる。

 

レシーバー

OOP用語で、

$taro->set_name('タロウ');

この「$taro」の部分=「->」の前の部分を「レシーバー」と呼びます

後で「this」とか「self」というOOPで使う汎用的なレシーバーが登場するので、記憶の片隅に「レシーバー」という言葉を覚えておいてください。

 

#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の仕組み(後半)

anond:20181022232327 増田プログラマー養成講座 その9 MVCフレームワークを使ってみよう

anond:20181023184616 増田プログラマー養成講座 その10 OOP参考書

anond:20181024214737 増田プログラマー養成講座 コンテンツ一覧

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の仕組み(後半)

anond:20181022232327 増田プログラマー養成講座 その9 MVCフレームワークを使ってみよう

anond:20181023184616 増田プログラマー養成講座 その10 OOP参考書

anond:20181024214737 増田プログラマー養成講座 コンテンツ一覧

増田プログラマー養成講座 その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の仕組み(後半)

anond:20181022232327 増田プログラマー養成講座 その9 MVCフレームワークを使ってみよう

anond:20181023184616 増田プログラマー養成講座 その10 OOP参考書

anond:20181024214737 増田プログラマー養成講座 コンテンツ一覧

2018-09-19

anond:20180919011805

知らんけど、環境入れた状態スナップショット一個取って要員ごとにインスタンス作ればいいだけの問題に何やっとるんかって気がする。

昔の人も言ってたぞ。「チキンバラすのにブッチャーナイフは大げさ」ってな。

目的を見失いすぎだろ。やりたいのは奇怪学習ちゃうんか?

2018-09-18

Mastodon憶測を解く

Mastodon話題で語られがちな"憶測"

Mastodon話題では頻繁に"憶測"が飛び交う。

これを"思い込み"と表現しても良いし、他には"勘違い"だったり、過激表現を使えば"無知"と言って良いかも知れない。

それは別にTwitterユーザはてなユーザだけでなく、当のMastodonユーザですらMastodonというSNS認識へ対して憶測を話してしまうことがある。

今回はその憶測を解いていこうかな?と思う。

Twitterより自由

これはYESであり、NOである

もちろん開発がオープンで行なわれており、そういった自由さはTwitterよりもある。

しかし、言論の自由Twitterよりもあるのか?と言われると「インスタンスによる」としか言いようがない。

なぜなら中央集権ではないMastodonルールは、そのインスタンス管理者法令に背かない範囲で定めるからだ。

Mastodonでは独裁体制を築く自由すらあると考えなければならない(インスタンス登録ユーザがついてくるかは別として)。

Twitterのような心的ストレスが少ない

これもYESであり、NOである

現在はTwittetよりも圧倒的にユーザ数が少なく、そのため話題バリエーションTwitterよりは抑えられているという傾向はある。

しかし、もしTwitter並のユーザ数となる未来を想定した場合の心的ストレスはそこまでTwitterとは変わらないことが予想できる。

個々のユーザ自分発言に対して責任を持たなければならないのはTwitterと全く同じで、責任の重さから来る心的ストレス絶対にある。

コミュニティ形成やす

これはYESである

Mastodonはいわゆる"テーマインスタンス"と呼ばれるインスタンス存在する。

Twitterにはないローカルタイムライン存在し、まるでチャットのようにコミュニケーションをすることが可能なので、コミュニケーションには他のユーザフォロー必須Twitterよりはコミュニティ形成やすい。

しかし、これによって一部のMastodonユーザの中でMastodonというSNSへ対して誤解が生じる原因にもなっていたりする。

これについて語っていこう。

Mastodon特定テーマコミュニティとするローカルタイムライン

これがMastodon運用するにおいてイメージやすい前述したテーマインスタンスである

テーマを絞り、参加するユーザ趣味趣向を近付けることによってコミュニケーションをするローカルタイムライン派。

ローカルタイムラインによってコミュニケーションを行なう場合ユーザフォロー必須でない。

そのインスタンス登録しているユーザの公開書き込みはすべてローカルタイムラインへ公開されているのでフォローする理由に乏しいのだ。

しかし、Mastodonにはホームタイムライン派と呼ばれる層も居て、自分の使い方がMastodonすべてでの使い方だと勘違いしてしまうと、考え方の違いによって衝突する可能性が出て来てしまう。

MastodonTwitterのように運用するホームタイムライン

例えばユーザ数が数万も居るようなインスタンスではローカルタイムラインの流速は物凄く速く、人間では読むに堪えない。

そのためユーザ数が数万も居るようなインスタンスではTwitterのように気になるユーザフォローしてホームタイムラインをメインとして運用する手法スタンダード

こういう使い方では単にユーザ数の少ないTwitterしかないので、Twitterをヘビーに使っているユーザからするとつまらない可能性が高い(面白そうなユーザ絶対数も少ないため)。

垣根を飛び越えられることへの慣れ

ローカルタイムライン派は基本的フォロー機能価値が低く、その発言自身所属するコミュニティーへ向けて発信されていることが多い。

逆にホームタイムライン派はフォロー機能価値が高く、Mastodonは他のインスタンスユーザフォロー可能なので、ここで認識の違いが生まれる。

ホームタイムライン派はインスタンスを飛び越えてコミュニケーションを取ることへ慣れているので、インスタンスを飛び越えてコミュニケーションを取ることへ慣れていないローカルタイムライン派へ何らかのアプローチを仕掛けてしまうことがある。

その際、ローカルタイムライン派は困惑した状況へ陥ってしま可能性が高い。相手へどのようなノリで返信して良いのか判らないからだ。

更にはより閉じたコミュニティーであれば他のインスタンスからアプローチを仕掛けられること自体不快であると感じてしまうことすらある。

しかし、こういうローカルタイムライン派へ「そう思うのであればMastodonを使うこと自体が誤りじゃないか?」とアドバイスしても、単にそれは「お前の中ではそうなんだろ、お前の中ではな」という話にしかならないので無駄

これはそれぞれの価値観の話でしかなく、不快かそうでないかは話し掛けられた方の主観しかないので話し掛けられても良い気分のときもある。それは人間から仕方ない。

想像力の逞しいはてな民であれば、ココまで説明するとココからどんな問題が発生するか?という想定はいくつも出来るだろう。

Mastodonはそういう意味ではTwitterよりもコミュニケーションが大変になる可能性はなくもない。

インスタンスにはそれぞれのルール文化があるからこそ非難拒否できる自由がある(場合もある)

どんなに社会通念上の倫理観非難すべき発言であれ、そのインスタンスが「当インスタンスでは、この系統発言は許容されている」と非難されるべきユーザを庇う可能性がある。

その際、非難した側のユーザは身を引くか、更に広く社会へ訴え出て、庇ったインスタンス非難を表明するかのどちらかになる。

これはもはや現実世界国家個人非難を浴せる、もしくは国家紛争と変わりなく、MastodonとはそういうSNSなのだ

これを認識せず「MastodonTwitterよりも気楽」と安易に考えてしまうのは早計である

Mastodonとは国である

であるからこそ、それぞれの思想によって自由国造りをすることが可能

であるからこそ賞賛非難を浴びることがあるし国家間同士の連携紛争が起きる。

それをTwitterよりも良いと捉えるか悪いと捉えるかは個々の自由である

2018-09-14

転職活動が難しすぎて草 新卒で入る会社大事だよ編

※この記事ウィスキーストレートの影響により読みづらい部分があります

大手SIer入社した。給料ぶっちゃけ高かった。

クラスインスタンスすら知らない人達Javaエンジニアを名乗ったり、Hueのデモをしただけで IoT 特区派遣されたり

色々不安はあったので、いつか転職しようとは思っていたが、これがまた微妙ぬるま湯環境なので特に行動しなかった。

インフラ系なんで経営的には過去最高だったり(でも給料はかわらない)会社の存続を心配することは皆無だけども

特定派遣法も厳しくなったこともあり、エンジニアリングより営業や、データセンターベンダーコントロールを任されることが増えてきた。

中学の頃からVBをやっているくらいプログラミングが好きなので、

来年の30前に転職経験しておこうと思って活動してみた・・・わけだが。

書 類 す ら と お ら ね え ^_^

ちなみに、意外と不採用理由は教えてくれるもの


とりあえず、”業務経歴として”開発できることを求められることがわかった。

ちなみに、自分コーディングスキルは、学生の頃にSDL、末期にはXNAやcocos2dxでスマホゲーくらいなら作ったことがある。

Unityはまったくしらん。

Web系では vue.js+rails で社内(2000人程)向けの okweb的なものはつくったりもした。これは割と好評だった。

しかし、振り返れば、確かに一般サービスの開発経験」は皆無だし、自分業務でやってきたのは公共系の改修作業がメインで、

しかも建前はコーディングはほぼしない事になっている。

新卒であれば、業務経験は問われないので、そういう意味では新卒で入る会社を誤ってしまったようだ。

最近はこのままぬるま湯でもいいのではないかと考え始めたので、僕はこのまま現状維持になりそうだが、

学生の人でプログラミング志望の人は、ネームバリューで選ぶなよ!

2018-09-10

anond:20180909073549

組込み界では今時のプログラミング界隈の常識の多くが通用しない。最初あなた相手にするのはRAM 1kB, ROM 4kB、クロック 20MHzなどというMCUである

使用する言語はC99かアセンブラである。幸か不幸かC++を使わされることもある。既にC++で書かれたプロダクトに係わってはならない。

当然フロントエンド界隈などのようなイミュータブルインスタンスを大量に使い捨て富豪的言語アプローチ採用は難しいだろう。

トラブルが起きたときプログラムだけでなく回路図を読んでハード側に問題があるこを示せないと極めて立場が悪くなる。

しろプログラムし易いコンポーネント選択や回路構成積極的に口を出していかないと動かない責任けがソフト担当者に投げられて割を食う。

開発環境Windows上のEclipseベース統合環境が使えれば上等であり、運が悪ければMCUメーカーお仕着せのクソIDEを使わせられる。Mac優雅に開発することはまずあり得ないだろう。

底辺企業バージョンコントロールシステムの導入のための意識改革簡単ではない。もし強行に導入しようとすればあなた孤立する。

誰かがIoTだ、機械学習だの言い始めても社全体として主力製品を作るのでなければ本気で取り組んではいけない。あなたがそのテクノロジー理解していても誰もサポートメンテもしてくれないのだから

2018-09-05

anond:20180905095839

えっと、クラスは大まかなざっくりとした定義(?)であって

インスタンスはそこから作られた実体

クラスは確かなんでも良いんだよね? 性別クラスがあったり、性格クラスがあったりとか…。

シリアライズはたくさんのクラスを通って作られたインスタンス実体)の特徴をまとめたデータってこと?

シリアライズデータから実体復元させるってことになるのかな。

何となく分かってきたけど、合ってるのかが分からない。

anond:20180905094945

クラスってのはバーサーカーとかライダーとかキャスターかいろいろあるだろ。

属性」と「振る舞い」が定義された人間側の便宜的な区別だよ。

セイバーなら刀を使うとか、アーチャーなら弓を使うとか。

セイバークラスには「顔が似てる」って属性定義されていて、キャスターには「重いものを運ぶのに便利」って属性定義されてるだろ。そういうのの塊。

インスタンスはそのクラス定義から作られた実体の事よ。

野獣先輩なんかはバーサーカークラスから作られたインスタンス吉田沙保里バーサーカークラスから作られたインスタンス

どちらも乱暴者という部分は共通しているよな。

それは、バーサーカークラスに「乱暴である」という属性定義があるからなんだ。

そして、その野獣先輩の特徴をwikiなんかに箇条書きで纏めていくことを「シリアライズ」と言う。

そうすることでwikiを参照した他の野獣先輩ファンが、自身野獣先輩になり切ることができるわけだろう。

このようにインスタンスの詳細を言語化することをシリアライズするってことになるんだよ。

分かった?

anond:20180905094534

VBAのショボイ知識ならあるんだけど、

クラスって、FunctionとかSubプロシージャとかそういう感じ?

インスタンス実体……。

シリアライズは、この例えで無理やり続けるなら、インスタンスたい焼きの頭を食べたとして、この時点で実体状態が変化している

変化したその状態を保存して、いつでも好きなとき実体に戻せるような形式実体を変換するのがシリアライズ

だめだ、わからん

anond:20180905093719

シリアナイズ→ごはんを食べてケツから茶色物体の一本線を出力すること。

出力された一本戦茶色物体は全人類共通なので、自身のひりだしたうんこアイドルのひり出したうんことすることも出来る。

インスタンス写メ撮ってインスタに投稿したとき記事のこと。「画像+メッセージ」という記事フォーマット要素が固まっているが、特にインスタ以外のSNSとは共通性が無いため、他のSNS投稿し直す際はシリアナイズを経る必要がある

これで分かる?

シリアライズインスタンスが良く分からん

Unity始めようと思ったんだけど

シリアライズインスタンスが良く分からない。

これはJAVA?それともC#?

データシリアライズしないと出来ない?どういうこと?

インスタンスデータを受け渡す?変数と何か違うの?

パース?デシリアライズ

意味が分からないよ。

単純に、シナリオゲーム用のマスターデータや、キャラ用のデータなどを保持しておきたいんだけど、

どうすべきなんかな。意味不明じゃ。

Unity本3冊買ったけど意味不明。

2018-08-17

anond:20180817104420

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

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

anond:20180817102719

ミクインスタンスグローバル世界に置いてN個存在できるのかどうかはプログラム次第。

今のところ初音ミクシングルトンとして設計されている模様。

コピーするとミクダヨーとか別のクラスになってしまうみたいだ。

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