リファクタリング、オブジェクト指向、クラスについて ( No.20 ) |
- 日時: 2021/09/15 07:32
- 名前: REDCHEEKS
- 前回までで、必要な機能は一応実現したわけだが、このままさらに機能追加、バージョンアップを続けていくと、プログラムが長く汚く見にくくなって、後々トラブルの原因になり、限界に達するので、一息おいて、見直すことにする。
日常用語で言うと「整理整頓」IT用語ではこれを「リファクタリング」って言うんだな。
具体的には、長くなったプログラムを複数個に分割する等の手段がある。
関数を分割したり、クラスを分割したり...ちなみにクラスとは、学校のクラスと同じ、ひとかたまり、一式って意味。
プログラムだけでなく、データも含めた一式を "クラス" という。
昔はプログラムはプログラム、データはデータという具合に別々に扱われていたが、オブジェクト指向になってから、両方まとめて一式ひとかたまりとして扱われるようになった。
これでかなり便利になったよ「オブジェクト指向」って聞いたことあるだろ?
データとプログラムを一式ひとかたまりとして扱う、つまりこれは「おしりという物体」と「叩くという機能」をひとかたまりに扱うようなものなんだ。
REDCHEEKS の説明わかりやすいだろ、ITの本いくら読んでも分からないが、オレの説明一発で分かるだろ? まあエッチお下品だが...
そして「オブジェクト指向」...なんせこれは便利なので、IT業界で一気に普及した。
そりゃ「おしり」とそれを叩く「パドル」が一式そろっていたら便利だもんね(笑)
それが「クラス」って奴なんだ、わかったかな?
*********************************************************************************************** クラス = データ(変数)+ それを処理するプログラム(機能) の一式 ≒ 「おしり」とそれを叩く「パドル機能」 の一式  ***********************************************************************************************
というわけで、次にクラスの作り方、使い方を説明する。
|
クラスの枠組みを作る ( No.21 ) |
- 日時: 2022/03/27 12:23
- 名前: REDCHEEKS
- クラスを定義するには、本当はキーボードから、
class 〜
と打ち込んでいかなければならないんだけど、Microsoft Visual Studio 2019 という開発環境は、これをある程度自動で作ってくれるから、これまたベンリーなんだな。
枠組みだけだけど、マウス操作で、簡単にできちゃうんだ。
まず、NakigotoOshikari というクラスを作ってみよう。
http://mediasp.kir.jp/img20220326/imgloglog-box/img20210913234454.png
@「課題01」プロジェクトを右クリックし、 A「追加(D)」を選択し、 B「クラス(C)...」を選択し、 C「クラス」が選択されていることを確認し、 D 名前(N):に「NakigotoOshikari.cs」を入力する。 E「追加(A)」ボタンをクリックする。
同様に、Loading というクラスを作ってみよう。
上の@〜E手順は同じだが、Dで入力する名前が異なる「Loading.cs」
とりあえず、現時点では枠組みだけで、中身は空っぽだが、これから作成して行くクラスの概略を説明しよう。
******************* NakigotoOshikari クラス *******************
「泣き言」とそれに対応した「お叱り」を、ペアで格納する。 システムとしては「泣き言」と「お叱り」をそれぞれ別個に管理することも可能だが、それだと一つでもずれたりするとトラブルになる。ペアで格納するのが一番安全。 その1組分のペアを実現するのがこのクラス。
初期設定として、「泣き言」と「お叱り」を格納する。この時「泣き言」を正規表現オブジェクトに変換し、曖昧なマッチング処理が高速に行えるよう準備する。
さらに人間が吐いた泣き言と、クラスに格納されている「泣き言」が、マッチングするかの判定を行う関数が、IsMatch()である。
************ Loading クラス ************
ゲーム等でデータを読み込むときに「Loading...」と出てくる、まさしくその機能。 読み込んだデータをもとに、NakigotoOshikari クラスを大量に生成する。 今は2件しかデータはないが、データが何万件にも増えれば、人間が吐いた泣き言に対するありとあらゆるお叱りが検索可能となり、ぐっとくるお叱りもいっぱい出てくるだろう、キーは泣いて喜ぶんじゃないかな?
※ 現時点では、データをプログラムに直接書いているが、将来的には、ファイルから読み込むようにする予定。
 |
クラスを設定し完成させる ( No.22 ) |
- 日時: 2022/03/27 12:23
- 名前: REDCHEEKS
- http://mediasp.kir.jp/img20220326/imgloglog-box/img20210913234531.png
@ NakigotoOshikari.cs をダブルクリックする。 A 正規表現の使用を宣言する。 B クラスの説明文を書く。 C クラスの中身を設定する。
NakigotoOshikari クラスの中身については、以下の通り。 ・コンストラクタ NakigotoOshikari(string nakigoto, string oshikari) 〜 コンストラクタとは初期化のため、クラスが新規作成される時に、一回だけ動作するプログラム。 パラメータとして与えられた、泣き言とお叱りのペアをクラス内の変数に保存する。 Oshikari = oshikari; regNakigoto = new Regex(nakigoto); ※ この時、泣き言に関しては、正規表現クラスに変換し、曖昧検索に備える。 ・変数 Oshikari お叱り ・変数 regNakigoto 泣き言(正規表現クラスに変換された泣き言) ・関数 プログラム IsMatch(string nakigoto) 〜 人間が吐いた泣き言をパラメータとして受け取り、それがクラス内に保存されている泣き言とマッチするか判定する。
D Loading.cs をダブルクリックする。 E クラスの説明文を書く。 F クラスの中身を設定する。
Loading クラスの中身については、以下の通り。 ・泣き言お叱り対応配列を作成する。その手順は以下の通り、 泣き言お叱り対応リストを作成する。 泣き言お叱りクラスを新規生成(new)し、それを泣き言お叱り対応リストに追加(Add)する。 泣き言お叱り対応リストを配列に変換(ToArray)する。
|
作成したクラスを利用する/動作確認 ( No.23 ) |
- 日時: 2022/03/27 12:24
- 名前: REDCHEEKS
- http://mediasp.kir.jp/img20220326/imgloglog-box/img20210914144116.png
@ Form1.cs を右クリックする。 A「コードの表示(C)」を選択する。 BC // を先頭に追加し、古いプログラムをコメント化するとともに、新しいプログラムを追加する。 D「開始」をクリックする。
機能的には、以前と変わっていません、異常がないか確認します。
【動作確認】
http://mediasp.kir.jp/img20220326/imgloglog-box/img20210808074521.png
@ 「いたいよぉ」と入力する。 A 「尻を引っ込める」ボタンをクリックする。 B 入力したメッセージと、それに応じたお叱りメッセージが表示される。 C 「ごめんなさい」を入力して「尻を引っ込める」ボタンをクリックする。 D 入力したメッセージと、それに応じたお叱りメッセージが表示される。
|
オーバーロードで新機能追加 ( No.24 ) |
- 日時: 2022/03/27 12:24
- 名前: REDCHEEKS
- とりあえずリファクタリング(整理整頓)は終了したので、さっそく新機能を追加しよう。
なんと追加する機能は「割り増し機能」暴言等態度が悪かったときに、叩く回数を増やす、ほんとビックリドッキリサディスティックな機能である。
実現のために使う技術は「オーバーロード」これは多様な機能を1つの関数名でまとめて多様性を実現するための方法。
http://mediasp.kir.jp/img20220326/imgloglog-box/img20210929063533.png
@ まず NakigotoOshikari クラスに、割り増し数を追加する。 A コンストラクタのオーバーロードを追加する。
コンストラクタとは、クラスが作成されるときに1度だけ呼び出される初期化プログラム。 それのオーバーロードを作成することで、多様な処理が可能になる。 昔のプログラム言語では、同じ名前は定義できなかったが、最新のプログラム言語は、名前だけでなく、パラメータの数や形を総合的に判定してくれるから、同じ名前も定義可能、いちいち名前を変える必要がないので、便利なのだ。 それをオーバーロードという。
追加するパラメータは、Premium(プレミアム)要するに英語で「割り増し」の意味。
public NakigotoOsikari(string nakigoto, string oshikari) ← 従来のコンストラクタ public NakigotoOsikari(string nakigoto, string oshikari, int premium) ← 今回追加する"プレミア付き" のコンストラクタ
※「態度が悪いとオシリにプレミアがついてより痛くなる」サディスティック、ボッキーなシステムです 
B Loading クラスに、データを追加する。
list.Add( new NakigotoOsikari( "(やめろ|うるせえ|くたばれ)", "反抗的なので{0}回増やしました。", 3 ← 割り増し回数(プレミア)の指定 ));
p.s. なお、余談だが、"反抗的なので{0}回増やしました。" のなかでの {0} は、次に指定している、割り増し回数 3 に置き換えられる。 それを実現しているのが、this(nakigoto, string.Format(oshikari, premium)) という構文、 ここで、this とは、従来のコンストラクタの呼び出し、string.Format(oshikari, premium) は、{0} を 3 に置き換える書式処理だ。
 |
作成したクラスを利用する/動作確認 ( No.25 ) |
- 日時: 2022/03/27 12:25
- 名前: REDCHEEKS
- http://mediasp.kir.jp/img20220326/imgloglog-box/img20210916234204.png
@ Form1.cs を右クリックし A「コードの表示(C)」を選択する。 B 割り増し追加 C 開始ボタンをクリックする。 D 実行結果(回数が増やされている!)。 
|
クイックウォッチによるデバッグ ( No.26 ) |
- 日時: 2022/03/27 12:25
- 名前: REDCHEEKS
- >>22 で Loading クラスを作成したが、実際にどんな形でデータが取り込まれているか、見てみよう。
"クイックウォッチ" という機能を使えば、どんな恥ずかしいデータも覗けるのだ。
以下、その手順について説明する。
http://mediasp.kir.jp/img20220326/imgloglog-box/img20210917084702.png
@ Form1.cs を右クリックし A「コードの表示(C)」を選択する。 B 「パンツ下ろして、オシリ出しなさい」の行の左端をクリックし、ブレークポイントを指定する。 ※ ウォッチ対象は、1つ上の行 var nakigotoOshikari = Loading.GetNakigotoOsikari(); C「Debug」で「開始」をクリックする。 D「お仕置き開始」をクリックする。
すると「パンツ下ろして、オシリ出しなさい」の行が、黄色く表示され、そこでプログラムが停止するので、
http://mediasp.kir.jp/img20220326/imgloglog-box/img20210917084759.png
@ 1つ上の行の変数 nakigotoOshikari を右クリックし A「クイック ウォッチ(Q)...」を選択する。 B「クイック ウォッチ」ダイアログが表示されるので、見やすいようにサイズ等を調整する。
【表示内容についての説明】
先頭の行の {課題01.NakigotoOsikari[3]} というのは、3個の配列が用意されていると言うことだ。 C#やJavaのように、C言語から進化した言語は、0 から数えるので、3個ということは、[0],[1],[2] の3つの配列要素があると言うことだ。 左の列の [0],[1],[2] がそれに対応する。 そして、[0],[1],[2] のそれぞれに、Oshikari, Premium, regNakigoto がつながっているのだ。 現在のデータは3件だけだけど、もし1万件のデータがあったら、人間が発したありとあらゆる泣き言に対する、お叱りが用意され、もう逃げ場はない、考えただけでも恥ずかしい「お尻叩きお仕置きシステム」が実現することになる。AIが人間をお仕置きする夢の世界がまた一歩近づきましたね 
http://spankingart.org/wiki/File:Dc27.jpg http://mediasp.kir.jp/img20220326/imgloglog-box/img20210215201330.jpg
 |
データヒントでデバッグ ( No.27 ) |
- 日時: 2022/03/27 12:26
- 名前: REDCHEEKS
- 大きな配列なら、クイックウォッチ >>26 で見た方がいいが、ちょっとした変数なら、もっと手軽に見ることが出来る。
その方法を説明しよう。
http://mediasp.kir.jp/img20220326/imgloglog-box/img20210917133349.png
@ 逃げるオシリのアルゴリズム内の、割り増し追加の行に、ブレークポイントを設定する。 A「Debug」で「開始」ボタンをクリックする。 B「お仕置き開始」ボタンをクリック「尻を突き出す」ボタンをクリックした後、暴言を入力し「尻を引っ込める」をクリックする。 C n += item.Premium; のところで停止していることを確認 (この時、黄色くなった部分は、プログラムとしては、まだ実行されていない) D マウスカーソルを 変数 n に近づけると、n の 値が表示される。 E マウスカーソルを Premium に近づけると、item.Premium の 値 3 が表示される。 F 「F10」キーを押下し、プログラムを1つ進める。 G もう一度、マウスカーソルを 変数 n に近づけ、D の時よりも増えていることを確認する。
ところで、n += item.Premium; について、もう少し補足しよう。 この += というのは、現在の n の値に、さらに「item.Premiumの値=3」を加えるという意味。 だから、n は、30 から 33 になったわけだ。 もし間違って、n = item.Premium; って書いたら、n は、3 になっちゃうから注意、メチャ甘くなるよ(笑) あくまでも、今までの値にさらにプラスする += の方を使わないといけない。 暴言には、厳しく += を使い懲らしめる必要があるということだ。 3 と 33 では大違い、30 違えば、尻の皮真っ赤でヒイヒイ泣くからね。 
|
クラスとインスタンスの違い、new演算子 について ( No.28 ) |
- 日時: 2021/09/25 07:31
- 名前: REDCHEEKS
- 白状すると、これまでは、説明が面倒だったので、インスタンスと言うべきところをクラスと言ってしまっている所があったんだな。
>>21 の最後の方 > 読み込んだデータをもとに、NakigotoOshikari クラスを大量に生成する。
これは本当はインスタンスなんだな インスタンスを説明するのがめんどくさくて、しかも一度に説明するとかえって混乱を招くので、あえてそうしていたんだ。
では、クラスとインスタンスの違いとは何かについてこれから説明しよう。
****************************** クラス とは 設計図、間取り図 インスタンス とは 実体、実際の建物 ******************************
そして、プログラム中にある new とは、設計図から実体を作り出すという意味
実体1 = new 設計図() 実体2 = new 設計図() 実体3 = new 設計図() :
これを100万回繰り返せば、1つの設計図から100万個の実体が出来ると言うことなんだ。
実体といっても、実際はコンピュータ内に「メモリ領域」を確保するって事なんだな。
クラスは設計図、インスタンスは実体、そして設計図を元に、同じ間取りの部屋を多量に作る、マンション建設のような事が、コンピュータ内部で行われているんだ。 マトリックスの世界を垣間見たような気がするね。
オブジェクト指向以前の時代は、メモリ領域の確保は、手動(マニュアル)でやってたから面倒だったよ。
http://www2s.biglobe.ne.jp/~nod/nod2/patio/patio.cgi?mode=view2&f=484&no=192
今はオートマ車、new 一発で済むから、簡単楽ちん!
|
継承とは ( No.29 ) |
- 日時: 2022/03/27 12:27
- 名前: REDCHEEKS
- 継承とは、クラスとインスタンスに並ぶ、オブジェクト指向のキモで、重要な概念。
これをREDCHEEKS名物の、超お下劣お下品エッチなやり方で、これから説明して行くよ。
さて、>>28 では、
実体1 = new 設計図()
ということで、建物と間取り図に例えて説明していたが、これは人間にも例えることが出来る。
人間1 = new 人間の設計図()
人間の設計図? うぁーここからエッチな話が始まるんだな、左右に割れたオシリとか(笑)
というわけで、期待しビンビン勃起しながら、やって欲しい準備があるんだ、それは以下の通り。
http://mediasp.kir.jp/img20220326/imgloglog-box/img20210923214800.jpg
@ スタートボタンをクリックする。 A Visual Studio 2019 を選択する。 B 新しいプロジェクトの作成(N) をクリックする。
http://mediasp.kir.jp/img20220326/imgloglog-box/img20210923214833.png
C C# Windows コンソール を選択する。 D コンソール アプリケーション を選択する。 E「次へ(N)」ボタンをクリックする。 F プロジェクト名(J) に「課題H」を入力する。ほんとエッチだよね。 G「次へ(N)」ボタンをクリックする。 H「作成(C)」ボタンをクリックする。
http://mediasp.kir.jp/img20220326/imgloglog-box/img20210923214856.png
@ 人クラスを定義する。 名前、身長、体重、尻 A 人クラスを継承して男クラスを定義する。 名前、身長、体重などは人クラスから引き継がれるので記述しない、男にしかないものを記述する。 B 人クラスを継承して女クラスを定義する。 名前、身長、体重などは人クラスから引き継がれるので記述しない、女にしかないものを記述する。 C 男のインスタンスを作成し、それを "red" とする。 red と入力した後、ピリオド . を打つと、男クラスの要素が一覧表示される。 一覧には、人クラスで定義したものと、男クラスで追加定義したものが、表示される。 とりあえず、名前を選択する。
http://mediasp.kir.jp/img20220326/imgloglog-box/img20210923214916.png
D 同様に、女クラスを定義し、名前などを適当に設定すると、このようになる。
男クラスのインスタンスである red には、人クラスから継承された、名前、身長、体重などに加え、男クラス独自の項目がある。 女クラスのインスタンスである zan には、人クラスから継承された、名前、身長、体重などに加え、女クラス独自の項目がある。 これが継承って機能なんだ。 何が便利かっていうと、今後人クラスに何らかの修正が加わった場合、それが自動的に男クラスと女クラスに反映されると言うことだ。 では、その修正例を示そう。
http://mediasp.kir.jp/img20220326/imgloglog-box/img20210923214856.png
まず、人クラス@の中身を確認すると、
「public object 尻;」という記述がある。
尻を1つのオブジェクトとして、オブジェクト指向的に記述しているわけだが、間違いではないが、これでは大ざっぱすぎて使えない。 少なくとも、尻は左右に割れているという事ぐらいは、コンピュータに認識させたい。 というわけで、その手順は以下の通りである。
http://mediasp.kir.jp/img20220326/imgloglog-box/img20210923214916.png
E まず、尻の設計図である "けつ" クラスを定義する。 右尻オブジェクトと、左尻オブジェクトに加え、ペンペン機能を記述する。 F 人クラス内の「public object 尻;」記述の先頭に「//」を追加し、コメント化(無効化)し、代わりに「public けつ 尻 = new けつ();」を記述する。
さて、これで準備は整った、後はメインプログラムへの記述である。
G まず、red に続いて、ピリオド . を打つと、一覧が表示されるので、尻を選択する。 H さらに、尻に続いて、ピリオド . を打つと、一覧が表示されるので、ペンペンを選択する。 ※ この時、ペンペンの他にも、右尻と左尻も表示されている。尻が左右に割れていることをコンピュータが認識しているのだ! I red と同様、zan もペンペンを選択する。 J 「課題H」を実行する。 K 2人から悲鳴が上がればOK。
p.s. REDCHEEKSの説明は、お下劣お下品でケツの臭いプンプン、学校の授業では絶対使えないが、下半身・性に直結するだけあって、わかりやすいだろ、みんな分かったかな、勉強は下半身でするものだよ(笑) http://www2s.biglobe.ne.jp/~nod/nod2/patio/patio.cgi?mode=view2&f=558&no=22
 |
ローカルウィンドウによるデバッグ ( No.30 ) |
- 日時: 2022/03/27 12:27
- 名前: REDCHEEKS
- >>28-29 に続き、さらにエロ満開で、デバッグ方法を伝授しよう。
これまで、クイックウォッチ >>26 データヒント >>27 などで、変数の内部を見ることを説明してきたが、もっと簡単な方法があるんだ。
それは、これから説明するローカルウィンドウ、これを説明するに当たり、以下の手順に従い、さらにエッチな変更をプログラムに追加する。
http://mediasp.kir.jp/img20220326/imgloglog-box/img20210924000334.png
@ REDCHEEKSの大好きな「色」を使うための、using文の追加。 A 尻半分の設計図「半けつ」クラス、ついに色が出て来たぞ色が! B これまでの大まかなobject定義をやめ、「半けつ」クラスで、尻半分をさらに詳細に定義、これで尻っぺたの色が管理可能に! C ぺんぺん処理で、尻っぺたの色を赤く設定。 D ブレークポイントを設定 E 「Debug」で「課題H」を実行
http://mediasp.kir.jp/img20220326/imgloglog-box/img20210924000353.png
ローカルウィンドウは、プログラムが起動すれば、ふつう特に何もしなくても、表示される。 但し、クイックウォッチと同様、見やすいようにサイズ等を調整する必要はある。 ローカルウィンドウの素晴らしいところは、変化した部分が、ピンク色に表示されること。 だから「F10」ボタンを押下して、1ステップ進めると、変化した所が一目瞭然クッキリ分かる。 恥ずかしい変化を見逃さないわけだ 
|
まとめると ( No.31 ) |
- 日時: 2022/03/27 12:27
- 名前: REDCHEEKS
- >>28-30 をまとめると、当初は、人クラスの中で、
public object 尻;
と大ざっぱに定義しているが、次の段階として、"けつ" というクラス(尻の設計図)を作成し、より詳細に定義する。 "けつ" というクラスの中では、
public object 右尻; public object 左尻;
と定義されているので、コンピュータは、尻は右尻と左尻に割れていることを認識するわけだ。 ただこの時点では、右尻も左尻も object つまり大ざっぱな定義に過ぎない。 そこでさらに次の段階として、"半けつ" というクラス(片方の尻の設計図)を作成し、より詳細に定義する。 片方の尻の設計図には、肉の粘りとか厚みとか、色んな要素が考えられるが、とりあえずまあスパマニアが一番喜ぶのは「色」だな。 「お尻真っ赤になりましたぁ!」って奴、http://mediasp.kir.jp/img20220326/imgloglog-box/img20200811003105.jpg すまわち"半けつ" というクラスの中では、
public Color 色;
を定義するわけだ。 結果として、プログラム上では、
red.尻.右尻.色 red.尻.左尻.色 zan.尻.右尻.色 zan.尻.左尻.色
という風に扱えるわけだ。
オブジェクト指向の醍醐味というか、ほんとエロいだろ(笑)
p.s. あと、人クラスの中で、 public けつ 尻 = new けつ(); なんて尻の臭いプンプンな構文を見ると、"尻" と "けつ" はどう違うのかと疑問に思う人もいるだろうが、日本語としての意味は特に関係ない、単なる使い分けとして利用しているだけ、単なる記号として割り切って欲しい。意味的には、 尻 = new 尻の設計図(); なのだが、いちいち「〜の設計図」と付けるのは面倒なので、別の表現を利用しているだけである。 つまり、尻の設計図 = けつ と言う前提の元に、 尻 = new けつ();
尻 は、インスタンス、実体 けつ は、クラス、設計図
"けつ" という体育会的表現を、"設計図(クラス)である" という意味として区別に使っているわけだ。
→ 体育会的な臭いを "ハンガリアン記法" の代用として活用しているわけだ(ハンガリアン記法→ググってね)。
だから統一性を考えれば、尻半分の設計図 は "半けつ" クラスとなり、その前提の元に、 右尻 = new 半けつ(); 左尻 = new 半けつ(); となる。
※「俺はシリという言い方もケツと言う言い方も知っている」「俺の語彙力すごいだろ」と自慢するのが文系小説家だが、それを実用的に利用するのが理系エンジニアである。
p.s.(2) そう言えば、ちんちん、おまんこは、object のままだったね。 ボクはスパマニアなんで、性器は忘れ、尻の方に注意が行ってしまったが、これらだって同じ、陰茎クラスと膣クラスを作ればいいんだ。 その要素として、長さとか、太さとか、締まりとか、いろいろあると思うが、ボクが重視するのは感度だな。 セックスでも、スパンキングでも、ヒイヒイ泣かせながらイクためには、感度調整が重要だ。 ポーの水車小屋が近づいて来たね 
 |
練習問題 ( No.32 ) |
- 日時: 2021/10/21 08:07
- 名前: REDCHEEKS
- 【練習問題1】
(1) 性器クラスを定義し、その要素として感度を定義してください。
(2) 性器クラスを継承して、陰茎クラスを定義し、追加要素として、長さと太さを定義してください。
(3) 性器クラスを継承して、膣クラスを定義し、追加要素として、深さと締まりを定義してください。
(4) 男クラス内で object として定義されている、ちんちんを、陰茎クラスとして定義しなおしてください。 ※ ヒント:object → 陰茎 に置き換え
(5) 女クラス内で object として定義されている、おまんこを、膣クラスとして定義しなおしてください。 ※ ヒント:object → 膣 に置き換え
【答え合わせ1】
Main プログラム内で、
red.ちんちん. と入力すると、感度 長さ 太さ が一覧表示されればOKです。
zan.おまんこ. と入力すると、感度 深さ 締まり が一覧表示されればOKです。
【練習問題2】
(1) 性器クラスに "しこしこ" 機能を追加し "ハァハァ(蟲)" を表示するようにプログラムしてください。 ※ ヒント:けつクラスのペンペンを参考にする。
【答え合わせ2】
Main プログラム内で、
red.ちんちん. と入力すると、感度 長さ 太さ に加え、しこしこ が一覧に追加表示されればOKです。
zan.おまんこ. と入力すると、感度 深さ 締まり に加え、しこしこ が一覧に追加表示されればOKです。
【練習問題3】
red.尻.ぺんぺん(); zan.尻.ぺんぺん(); に続き、 red.ちんちん.しこしこ(); zan.おまんこ.しこしこ(); を追加して、プログラムを実行して下さい。
【答え合わせ3】
2人から悲鳴に続き、あえぎ声が上がればOKです。
|
エクセルからのデータ読み込み ( No.33 ) |
- 日時: 2022/03/27 12:28
- 名前: REDCHEEKS
- 課題H はほんまエッチだったね。 ちんこの(先が潤んで)臭いがしてきたよ。
さてそろそろ、課題01の方に戻ろう。
>>21 の続き > ※ 現時点では、データをプログラムに直接書いているが、将来的には、ファイルから読み込むようにする予定。
データを読み込む部分、Loading クラスをこれから改造する。 今回は実用も兼ねて、エクセルからデータを読み込む方法を説明しよう。 但し実習を続けるにあたり次の2つの条件を満たしている必要がある。
【前提条件】
(1) パソコンにエクセルがインストールされていること。 (2) Microsoft.Office.Interop.Excel.dll を入手し、ダウンロードしデスクトップに置いておくこと。 ※ (2)は無料配布されているが、入手方法の詳細については省略する。
【準備】
http://mediasp.kir.jp/img20220326/imgloglog-box/img20210930000817.png @ デスクトップにある Microsoft.Office.Interop.Excel.dll を、課題01 にドラッグする。 A Microsoft.Office.Interop.Excel.dll が、追加されることを確認する。 B「参照」を右クリックし、 C「参照の追加(R)」を選択する。 D「参照(B)」ボタンをクリックする。 E 課題01 のフォルダを開き、 F Microsoft.Office.Interop.Excel.dll を選択し、 G「追加」ボタンをクリックする。 H Microsoft.Office.Interop.Excel.dll にチェックが付いていることを確認し、 I「OK」ボタンをクリックする。
【プログラムの改造】
http://mediasp.kir.jp/img20220326/imgloglog-box/img20210930210044.png @ using Microsoft.Office.Interop.Excel; を宣言する。 A プログラムに直接データを書いている部分の先頭に「//」を付けコメント化するとともに、エクセルファイルからの読み込みプログラムを記述する。 B「泣き言お叱り.xlsx」ファイルをデスクトップ上にエクセルで作成する。 C「開始」ボタンをクリックする。
【動作確認】
http://mediasp.kir.jp/img20220326/imgloglog-box/img20210808074521.png @ 「いたいよぉ」と入力する。 A 「尻を引っ込める」ボタンをクリックする。 B 入力したメッセージと、それに応じたお叱りメッセージが表示される。 C 「ごめんなさい」を入力して「尻を引っ込める」ボタンをクリックする。 D 入力したメッセージと、それに応じたお叱りメッセージが表示される。 ※ その他、反抗的なメッセージも入力し、回数が増えればOK。
p.s. コンピュータが人間を叱りつけお仕置きする凄い時代が近づいてきましたね  http://spankingart.org/wiki/File:Dc27.jpg 産業革命当時はこんな感じだったかな  http://commons.wikimedia.org/wiki/Category:Spanking_in_art#/media/File:Machine_%C3%A0_vapeur_pour_la_correction_c%C3%A9l%C3%A9rif%C3%A8re_des_petites_filles_et_des_petits_gar%C3%A7ons.tif またまた蒸気機関が笑える。 http://www.cnn.co.jp/photo/35174050-5.html AIが人類を支配する未来は、こんな感じかな  http://mediasp.kir.jp/img20220326/imgloglog-box/img20210215201330.jpg
 |
《コラム》 スクラッチについて ( No.34 ) |
- 日時: 2021/10/29 07:14
- 名前: REDCHEEKS
- 学校でプログラミング教育が必修化されたこともあり、注目されているのが「スクラッチ」というプログラミングなんだな。
これは構文の書き方を覚えること無く、グラフィカルな操作でプログラミング出来るって奴。
まあグラフィカルな表示は、生産性向上の観点から、プロの世界でも導入されてはいるが、スクラッチのそれは、プロの世界とは方向性が違うんだな。
これはあくまでも子供の教育用、メリットもあればデメリットもある。
プロにとっては、繰り返し処理や、条件分岐までグラフィカルにやられると、かえってめんどくさいからね。
あくまでも、子供の教育用 "オモチャ" という位置づけ。
では、これからプログラミングを学ぼうとする "オトナ" はどうすれば良いか?
************************************** オトナには "オトナのオモチャ" が必要なんだな  **************************************
http://www.amazon.co.jp//dp/B0974MH9X1 http://www.amazon.co.jp//dp/1090409885
というわけでオトナにとっては、今後ともエッチスケベ、ケツの臭いプンプンの「スパ・プログラミング講座」が最高だと思うよ 
|
オブジェクト指向のアドバンテージ ( No.35 ) |
- 日時: 2021/10/29 07:16
- 名前: REDCHEEKS
- さて、スパ・プログラミング講座をここまで読んでくれた諸君、感想はどうだろうか?
ちんちん勃起させながら、なおかつ、最新のIT技術を学べるのだから、これ最高だろ(笑)
オブジェクト指向を超エッチな喩えで説明するのが、REDCHEEKS名物の「◆ スパ・プログラミング講座」だが、オブジェクト指向の基本的な考え方は、ほぼ理解いただけたと思う。
さて、
★ REDCHEEKSのブログ(その1) http://www2s.biglobe.ne.jp/~nod/nod2/patio/patio.cgi?mode=view2&f=484&no=206
でも述べているが、
> ここで述べている、オブジェクト指向だとか、クラスだとか、継承だとか、比較的新しい概念は、IT業界でも理解できない人も多い。
とあるとおり、オブジェクト指向を理解すれば、かなりのアドバンテージだよ。
とはいえ、プロの世界はそう甘くはない、学ぶことは幾らでもある。
またそれ以前に、オブジェクト指向以前の基本的な事も、一息入れて、もう少し説明する必要がある。
というわけで、今後ともエッチスケベ満開で講座を続けて行くので、乞うご期待!
|
ポリモーフィズム、インターフェース ( No.36 ) |
- 日時: 2022/03/27 12:28
- 名前: REDCHEEKS
- ポリモーフィズムというのも、これもまたオブジェクト指向の考え方であり、キモなんだな。
そしてそれを実現する手段の一つが「インターフェース」なんだ。 さて、これらを説明するにあたり、練習問題>>32 で作ったプログラムを使用する。 念のためその解答を示しておくよ、http://mediasp.kir.jp/img20220326/imgloglog-box/img20211030211151.png このプログラムは充分にエッチだが、さらに次元を超えたとんでもないエッチな変更をこれから加える。
そもそも "ポリモーフィズム" とは何か? (融通の利かない)昔のプログラミング言語は、数字なら数字、文字なら文字と、同じ種類のデータしかまとめて扱えなかった。 この考えで行くと、男クラスである red と、女クラスである zan は、一緒に処理できず、男は男、女は女と、別々に扱う事になるので、プログラムは複雑になる。 それに加え、最近はLGBTとかいろいろあってますますややこしくなるので、それらを解決する技術が必要とされてきた。 これからの時代は、同じ種類のデータを集めた「配列」ではなく、多種多様なデータが入り交じった「コレクション」なんだな。
貴方はコレクションと聞くと何を思い浮かべるだろうか? フィギュアとかマニアックな世界? そうそう個性ある人形達だね。 このように、最新のオブジェクト指向プログラミングは、多様なものを扱えるようになった、それが "ポリモーフィズム" なんだ。 ではこれから「おなに」という機能を例に、 "ポリモーフィズム" を説明して行こう。
おなにと一口に言っても、男と女とでは、体の構造は異なり、やり方が違うはずである。 男と女では、オナにのし方に違いがある。 red は男クラスなので、ちんちんのしこしこを実行する。 それに対し zan は女クラスなので、おまんこのしこしこを実行する。 という違いがある。 何度も言うが、これらをどうやって一つの処理として統合するのか、といった難題を解決し、さらにはLGBTなどさらに複雑化する世界にコンピュータシステムを対応させる技術、それがオブジェクト指向であり "ポリモーフィズム" なのだ。
REDCHEEKSの超下ネタ解説はわかりやすいだろ? IT関連の書籍を読んでチンプンカンプンな人もこれで一発理解、これで本を出そうかな(笑)
さてその手順について、具体的に示そう。
http://mediasp.kir.jp/img20220326/imgloglog-box/img20211030225906.png
@ コレクションの使用を宣言する。 A インターフェース "Iえっち" を定義する。 ・インターフェース名の先頭には、Iを付けるというルールがあるので一応従う。 ・人類共通の快楽である「おなに」機能の使用を宣言する。 B 男クラスに、"Iえっち" インターフェースを(コンマに続けて)追記する。 C「おなに」機能の中身を定義する。 D 女クラスにもBCと同様の処置を施す。 E「//2人ともオナニー」の下にある、red と zan の直接記述をコメント化し無効にする。 F 変態コレクションを作成し、そこに、red と zan を追加する。 G 変態コレクションに含まれるすべての変態に対し、おなに() を実行するようにプログラムを記述する。
動作確認は以下の通り、
H「課題H」をクリックする。 I 2人の悲鳴のあと、あえぎ声が聞こえてくればOKです。
 |
ポリモーフィズムのまとめ(解説) ( No.37 ) |
- 日時: 2022/03/27 12:29
- 名前: REDCHEEKS
- >>36 のまとめ(解説)
http://mediasp.kir.jp/img20220326/imgloglog-box/img20211030225906.png について解説しよう。
まずEについて、これまでは、
red.ちんちん.しこしこ(); zan.おまんこ.しこしこ();
と言う具合に、プログラム上に red や zan を直接記述していた、これでも動作はするが、2人程度なら2行だが、何千何万人のデータを処理しようとすれば、プログラムの行数が増え、非常に長くなり、見にくく、最終的に管理できなくなるので困る。 それを避けるため、まずコレクション機能を利用する。 Fの変態コレクションがそうである。
var 変態コレクション = new List<Iエッチ>(); // Iえっちインターフェースを持つ変態コレクションを作成する。
そして、そこに、red と zan を追加する。
変態コレクション.Add(red); // 変態コレクションに、red を追加する 変態コレクション.Add(zan); // 変態コレクションに、zan を追加する
でも貴方はここで疑問が沸いてくるのでは? 変態コレクションの作成は、1行で済むが、その後の、red と zan を追加するところで、何千何万人のデータを追加しようとすれば、プログラムの行数が増えるのではないか? 結局見にくく、最終的に管理できなくなるのでは?
でもこれには解決策があるんだ、プログラム上に red や zan を直接記述していた時とは違ってね。 それはエクセルなどの外部ファイルに出来ると言うことなんだ。 (これについては、課題01における、エクセルからのデータの読み込み >>33 を参考に出来る、但し今回は説明を省略する)
そして最終的な極めつけはGの、foreach 繰り返し構文。
foreach(var hentai in 変態コレクション) { hentai.おなに(); }
これで変態コレクションに含まれるすべての変態に対し、おなに() が実行されるわけだ。
このようにプログラムを組めば、変態が何千万人いようが、一瞬で処理できる。
※ ちなみに、コロナの定額給付金の配布に何ヶ月もかかったのは、我が国のIT化が遅れているからであって、foreach 文を使えば、こんなもの一瞬だよ(笑)
p.s. それにしても、おなに() の定義をまじまじと眺めて思った C D ホンマ恥ずかしいわ。 「自分の名前を名乗って、これから○○します」その後ハアハアだって(笑) もちろん了解は取ってあります。ざんちゃんさんありがとう、変な事付き合わせてしまってごめんなさい。
 |
練習問題(ポリモーフィズム) ( No.38 ) |
- 日時: 2021/10/31 11:27
- 名前: REDCHEEKS
- (1) Iえっちインターフェースに、おしおき(); を追加してください。
(2) 男クラスに、おしおき() 機能を追加して下さい。内容は以下の通り、 ・ぼくは〜です。これから罰としてお尻叩きを受けます。 ・尻クラスのペンペン() を実行する。
(3) 女クラスに、おしおき() 機能を追加して下さい。内容は以下の通り、 ・わたしは〜です。これから罰としてお尻叩きを受けます。 ・尻クラスのペンペン() を実行する。
(4) 2人ともオシオキの下の、 red.尻.ぺんぺん(); zan.尻.ぺんぺん(); をコメント化(無効に)してください。
(5) 変態コレクションに含まれるすべての変態に対し、おしおき() を実行するようにプログラムしてください。
|
カプセル化(アクセスレベル )の話 ( No.39 ) |
- 日時: 2022/03/27 12:29
- 名前: REDCHEEKS
- 前回の練習問題>>38の解答はこちら↓
http://mediasp.kir.jp/img20220326/imgloglog-box/img20211104181420.png
さて毎回ながら、これをもとにさらにエッチな話を続けよう。
プログラム中にしょっちゅう出てくる、public って何? と思う人もいるだろう。
これはオブジェクト指向における、カプセル化の話につながっていくんだね。
一言で言うと、public は露出、private は隠蔽、protected はその中間的なもの(身内にだけ露出、他人には隠蔽)
そして、プログラムの動作に支障が無い限り、public よりも、protected そして private にした方が良い。
露出していると外部から触られるからね。例えば、
public けつ 尻 = new けつ();
なんてのは本当は良くない、外部から尻触られてしまうからね。
当初はお尻を叩くという目的のために、パブリック(public)に露出していたが、おしおき() という機能を追加した今となっては、露出する必要は無くなったと言って良い。
だから、尻は今後、public をやめて、private か protected にすべきなのだ。
ただ、そうすることで、おしおき() は利用できなくなるかというと、そうではない。
public void おしおき()
と定義されているように、おしおき() 機能自体は、パブリックに露出しているし、今後ともそれは変わらない。
private か protected にするのは、尻の方のみ。
つまりこれからは、おしおき() という機能を通じて、間接的に、尻を触ることになる。
逆に言うと、おしおき() 機能を通してしか、尻は触れなくなる。
このようにすることで、おしおき以外の目的で、尻を触られることはなくなるわけだ。
また行きすぎた体罰をなくすため適切なおしおきかどうがチェックする機能を追加することも出来る。
これらを「カプセル化」って言うんだ。
これは、多人数でプログラムを開発しているときには、特に重要。
他人にいきなり変なところを触られて、プログラムの動きがおかしくなることを防ぐための機能なのだ。
だから、何を公開(public)するかは、常に意識し、最小限にする必要がある。
いまいちピンと来ない人のために(スパマニアが喜ぶ)もっと具体的な例で説明しよう。
何か悪いことをして、学校から保護者呼び出しを食らったとしよう。
そこで親が先生に「おしおきしておきます」と言ったとしよう。
学校の先生は家庭内のおしおきには直接は関われない。
つまりあなたのお尻はカプセル化(private, protected)により保護されているんだ。
でも、おしおき() は、なしかというと、そうではない。
あなたのお尻は家に帰ってから(外部から隠蔽されたそのプライベートな家庭空間のなかで)むき出しにされ、みっちりおしおきされる運命にある。
プライベートとは(ポーの水車小屋より) > 水車小屋の扉は堅く閉ざされています。 > でもその中では、秘められた仕組み、少女たちを正しく導くための仕組み、それが今まさに機能しているのです。 > こればかしは、人には見せられません。
分かったかな? それが「カプセル化」って概念なんだ。
 |
カプセル化(実習) ( No.40 ) |
- 日時: 2022/03/27 12:30
- 名前: REDCHEEKS
- http://mediasp.kir.jp/img20220326/imgloglog-box/img20211110003436.png
@ 人クラス内の「public けつ 尻 〜」を、private に変更する。 A エラー一覧にエラーが表示される。 B 場所を調べると、人クラスを継承した、男クラスと女クラスでエラーが出ているようだ。
private では継承クラス、つまり身内にエラーが出るため(厳しすぎるので)少し緩めて、protected で行く事にする。
C 人クラス内の「private けつ 尻 〜」を、protected に変更する。 D エラーは出なくなった、これでOK、実行可能。
ちなみに、>>38 の
> (4) 2人ともオシオキの下の、 > red.尻.ぺんぺん(); > zan.尻.ぺんぺん(); > をコメント化(無効に)してください。
これを、元に戻すと、
E 再びエラーが出るので、カプセル化(アクセス制御)は効いている事が確認できる。
※つまりメインプログラム、static void Main(string[] args) {...} 内からは、直接尻を触れなくなるわけだ!
|
《ニュース》 Visual Studio 2022 がでたね ( No.41 ) |
- 日時: 2022/03/27 12:30
- 名前: REDCHEEKS
- http://visualstudio.microsoft.com/ja/launch/?ocid=vstndb63
Visual Studio 2022 がでたね。
スパ・プログラミング講座では、特に影響する内容はないので、しばらくは、Visual Studio 2019 を使って行くことにするが、時代はどんどん進んでいくね。
Windows 11 ももうすぐだし、出来るだけ長生きして、可能ならば脳を冷凍保存して、来たるべきマトリックスの世界に備えよう。
もっとも、マトリックスの世界だって、決して楽な世界ではないけどね、たぶんお尻叩いて勉強や仕事させられるだろうね。 http://mediasp.kir.jp/img20220326/imgloglog-box/img20161218221422.jpg http://www2s.biglobe.ne.jp/~nod/nod2/patio/patio.cgi?mode=view2&f=494&no=119
原子炉内の燃料棒のように真っ赤に燃える ↓↓↓ ケツマッカ・シンギュラリティは近い。 http://www2s.biglobe.ne.jp/~nod/nod2/patio/patio.cgi?mode=view2&f=484&no=0-2
まあ、それに耐えられるのは、スパマニアって事だ! 
|
オーバーライドで、どぴゅー機能を実装する ( No.42 ) |
- 日時: 2022/03/27 12:31
- 名前: REDCHEEKS
- オーバーライドというのも、オブジェクト指向の目玉の一つなんだな。
ただ以前に説明した「オーバーロード」とは異なる。 名前が似ていてややこしいね。
オーバーライドとは、"ライド" ride = 乗る、上書き!
同じ名前で(パラメータの数や型も全く同じのもので)置き換えること(上書き、ride = 乗る)
それに対し、
オーバーロードとは、同じ名前で、パラメータの数や型が違うもの、要するに「バリエーションを増やす」って事(>>24で説明した"プレミア"付き)
違い分かるかな?
さてこれまでの経緯を説明すると、性器クラスに、しこしこ() 機能が実装されており、さらに性器クラスを継承して、陰茎クラスと膣クラスが用意されていたわけだが、これから行うのは、陰茎クラスに、独自の しこしこ() 機能を追加する必要が生じた場合への対応だ。
今回のテーマは「オーバーライドで、どぴゅー機能を実装する」って事なんだな、ぶっ飛んでるだろ 
ではまた、さっそくエッチな実例を挙げて説明しよう。
http://mediasp.kir.jp/img20220326/imgloglog-box/img20211116024803.png
@ 男女共通である、性器クラスの しこしこ() 機能に、virtual を追加する。 これでオーバーライドが許可されるわけだ。
A 陰茎クラスに、男性独自の、しこしこ() 機能を、新たにオーバーライド(override)として定義する。
こうすることで、性器クラスの しこしこ() 機能は、オーバーライドした、陰茎クラスの しこしこ() 機能に置き換えられるわけだ。
ちなみに、完全に違うものに置き換えることも出来るが、継承元の(従来の)性器クラスの しこしこ() 機能も利用したい場合は、陰茎クラスの しこしこ() 機能の中で、
base.しこしこ();
と書けば、そこから性器クラスの しこしこ() 機能を呼び出すことも出来る(ハアハア)。
ただその場合注意しなければならないのは、必ず、base. を付けること、それを付けないと、自分自身を呼び出してしまうからね。
(再帰呼び出しというテクニックもあるが、不用意に自分自身を呼び出しちゃうと、スタックオーバーフローというエラーになってしまうよ)
B 課題Hを起動する。
C ハアハアに続いて「どぴゅ〜〜〜」が表示されればOK!
 |
練習問題(オーバーライド) ( No.43 ) |
- 日時: 2021/11/20 20:17
- 名前: REDCHEEKS
- プログラミング技術の取得は、説明を聞くだけでなくて、実際にやってみることが重要だな。
というわけで今回もまた、練習問題として、たまらんエッチドスケベな課題を出そう。
今回の説明では、性器クラスを継承した陰茎クラスに、しこしこ() 機能を追加し、性器クラスに元からあった しこしこ() 機能を置き換え男性特有の しこしこ() 機能を実現したが、膣クラスも同様に、しこしこ() 機能を追加し、女性特有の しこしこ() 機能に置き換え、ハアハアの後に、"潮吹き" を表現してみよう。
|
XMLコメントの書き方 ( No.44 ) |
- 日時: 2022/03/27 12:31
- 名前: REDCHEEKS
- 今回はオブジェクト指向の話を離れ、コメントの話をしよう。
そもそもコメントとは何か、それはプログラムを見る人間のための説明書きなんだ。 だからコンピュータの動作には影響しない。 極論すれば、コメントが間違っていても、プログラムが正しければ、コンピュータはちゃんと動作するし、逆にいくらコメントが正しくても、プログラムが間違っていれば、誤動作する。 ではなんのためのコメントかというと、あくまでも人間のための覚え書きなんだ。
コメントの書き方は、プログラム言語によって異なるが、CやCから進化した、Java や C# では、// と2個並べることで、それ以降はコメントと見なしてコンピュータは関知しないというルールになっている。 コメントは、Visual Studio では、緑色に色分け表示され、わかりやすく表示されている。 Visual Studio(ビジュアル スタジオ)は、自動的に色分けしてくれて、わかりやすいだろ、さすがビルゲイツ、IT業界の「ビジュアル系」だ。
さて、// と2個並べるのは、普通のコメントだが、ビジュアルスタジオには、さらに次元を超えた、強力なコメント機能が存在する。 さらにスラッシュを3個並べることで、発現するその機能、それがXMLコメントなんだな。
というわけで、その次元を超えた強力なコメント機能について、今回も次元を超えたドエッチな説明始めるよ。
http://mediasp.kir.jp/img20220326/imgloglog-box/img20211118234247.png
@ 性器クラスの しこしこ() の上の行の 感度; の右をマウスでクリックし、カーソルをそこに置く。 A Enter(Return)キーを押下すると、改行され、空白の行が生まれる。 B そこに、スラッシュを3個入力した途端、 C <summary> と表示され、コメント入力可能な状態となる。 D コメント(しこしこ機能の説明)を入力する。
これで、XMLコメントが作成されたわけだ。 では、次にXMLコメントが表示されるのを確認しよう。
E 陰茎クラスのオーバーライドされた しこしこ() 内の、base.しこしこ() にマウスカーソルを持って行くと、先ほど入力したコメントが表示される。
これでどんなに恥ずかしい機能も、一目瞭然、露わになるのだ。 では次に、陰茎クラスのオーバーライドされた しこしこ() にも同様のコメントを書いてみよう。
F @〜D と同様に、どぴゅ〜機能も含めて、説明書きを加える。
これで、XMLコメントがさらに作成されたわけだ。 ではこの恥ずかしいコメントの表示を確認しよう。
G 男クラスの おなに() 機能内の、ちんちん.しこしこ() にマウスカーソルを持って行くと、先ほど入力した、たまらん恥ずかしいコメントが表示される。
 |
練習問題(XMLコメント) ( No.45 ) |
- 日時: 2021/11/20 23:50
- 名前: REDCHEEKS
- コメントを書き、プログラムをわかりやすくすることは、システム開発にとって重要です。
(1) これまで男側で説明してきましたが、同様に女側にもコメントを書きましょう。
(2) ぺんぺん() や おしおき() や おなに() などにもどんどんコメントを書いて行き、たまらん恥ずかしいシステムを構築しましょう。
|
《コラム》 BASIC系とC系のプログラミング言語の違い ( No.46 ) |
- 日時: 2021/11/26 00:51
- 名前: REDCHEEKS
- よく使われているプログラミング言語には、BASIC系統とC系統がある。
BASIC系のプログラム言語には、VB.NET それに対しC系は、C, C++, C#, Java などがある。
では、BASIC系とC系のプログラミング言語の違いは何なのか、説明しよう。
具体的な構文の比較は、一般のIT書籍に任せるとして、ここではあまりにも当たり前で、誰も言わない話をしよう。
設計思想というか、数の数え方が違うんだな。いわゆる「ゼロの発見」って奴なんだ。
例えば「お尻を10発叩く場合」を例に挙げて説明しよう。
※ ウェブ・パティオは "お尻叩き関連以外のテーマもOK" なのだが、オレが書くと、プログラミング言語の話をしていても、どこかでスパンキングに結びついちゃうんだな 
**************************** BASIC(ベーシック)系の場合 ****************************
FOR N = 1 TO 10
SPANK
NEXT
**************************** C系の場合 ****************************
for ( n = 0; n < 10; n++ ) { spank(); }
****************************
BASIC(ベーシック)系は、1 から 10 まで繰り返すのに対し、C系のプログラミング言語は、0 から始まり、10 未満の範囲で繰り返す。
BASIC(ベーシック)系は、1 から始まる自然数、それに対しC系のプログラミング言語は、0 から始まる整数
お尻叩かれるとき、1,2,3,4,5,6,7,8,9,10 と数えるのが、BASIC(ベーシック)系であるのに対し、
お尻叩かれるとき、0,1,2,3,4,5,6,7,8,9 と数えるのが、C系のプログラミング言語なのだ。
BASIC(ベーシック)系は 1 から 10 までの 10 発、それに対し、C系は 0 から 9 までの 10 発
同じ 10 発でも数え方が違う、こう説明すればわかりやすいだろ、そりゃ尻真っ赤になるマジいてぇ話だもんな 
直感的には、BASIC(ベーシック)系の方がわかりやすい。
そりゃBASIC(ベーシック)のBはビギナーのB、ビルゲイツが初心者向けに開発した言語だからね。
でも複雑な処理をプログラムして行くためには、ゼロから数えるC系の方が、計算式が何かとシンプルになるんだな、つまり「ゼロの発見」って奴だ!
 |
列挙型(enum型)について ( No.47 ) |
- 日時: 2022/10/24 01:19
- 名前: REDCHEEKS
- 今回は、オブジェクト指向の話を離れ、それ以外の便利な機能、列挙型(enum型)についてお話ししよう。
そもそも、コンピュータの一番得意とするのは、数値処理、これが一番速い。 文字列は、長いのやら短いのがあって、同一であることを判定するにも、最初から最後まで比べないといけないのでめんどくさいよね。 でも人間にとっては、文字列の方がわかりやすいんだな、例えば、 「セックススパンキング」 か 「ディシプリンスパンキング」 か、という項目があったとしよう。 従来ならば、人間がコンピュータに合わせて、 セックススパンキング は 1 ディシプリンスパンキング は 2 という風にルールを決めて、プログラムを組んでいたわけだ。 でも、人間にとっては、ちょっとわかりにくい。 そもそも、 セックススパンキング = 1 ディシプリンスパンキング = 2 と決めたんだったっけ、それとも、 セックススパンキング = 0 ディシプリンスパンキング = 1 と決めたんだったっけ、どちらだったっけ? なんてプログラムを組みながら思ったりするわけで、間違いのもとにもなる。 それを防ぐための、コンピュータと人間の妥協案、それが列挙型(enum型)なのだ。 つまり、人間が目にするプログラム上では、セックススパンキング, ディシプリンスパンキング という人間にわかりやすい表現を使うが、 コンピュータ内部では、0 とか 1 とかの数値を適当に割り付けて処理するというわけだ。 というわけで、今回もまた課題Hを使用し、これまで通りエッチスケベな例で説明するよ。
http://mediasp.kir.jp/img20220326/imgloglog-box/img20221017013017.png @ スパンキング嗜好タイプの列挙型(enum型)を定義する。 XMLコメントも恥ずかしがらずしっかり書く。 A 人クラスに、嗜好タイプを追加する。 B Iえっちインターフェースに、嗜好タイプを追加する。 C REDCHEEKSの嗜好タイプを設定する。 D ざんちゃんの嗜好タイプを設定する。
http://mediasp.kir.jp/img20220326/imgloglog-box/img20221017013121.png マウスカーソルを持って行くと、一目瞭然、恥ずかしいコメントが表示される 
p.s. 恥ずかしさのあまり、チンポの先が潤んでくるよ! 臭ってくるよ 
 |
クエリー(LINQ)について ( No.48 ) |
- 日時: 2022/10/18 02:02
- 名前: REDCHEEKS
- クイアじゃないよ、クイアはLGBTの話、クイアじゃなくてクエリの話だよ。
クエリーとは、データベース問い合わせ言語のこと。 昔は、データを検索するとか、並べ替えるとか、そのような事にもいちいちプログラムしていたが、それでは効率が上がらないし、間違いの元ということで、そういったお決まりの処理を専門に行うシステムが誕生した。 それを「データベース」という。 だから今では、検索するとか並べ替えるとか、そういう処理そのものを、実務でプログラミングすることは無い。 だからと言って、プログラムが不要になったわけではない。 データベースに対して「こうこうこういう条件で検索し、こういう条件で並べ替えてくれ」と指示を出すことは必要であり、そのためのプログラム言語がクエリーなのだ。
クエリーといえば、昔からSQLが有名だが、最近はさらに進化して、C# などのプログラム言語に統合して組み込まれた、LINQなんかが最新だな。 というわけで、これまで通り、課題Hを使ってエッチな説明をしていこう。
http://mediasp.kir.jp/img20220326/imgloglog-box/img20221017225627.png @ クエリー(LINQ)の使用を宣言する。 A foreach のひとつ前の行で「変態コレクション」から特定の条件(男のみ)で絞り込み「選ばれし変態たち」というコレクションを作成する。 B foreach 文内の「変態コレクション」を「選ばれし変態たち」に置き換える(コメントも含め)。 C 「課題H」をクリックし実行する。
【結果】 D 男である REDCHEEKS のみに対して、おしおき() と おなに() が実行されればOK(女である ざんちゃん さんは表示されないこと)
【解説】 追加したプログラム ************************************************** var 選ばれし変態たち = 変態コレクション.Where(h => h is 男); ************************************************** について説明しよう。
このなかで、Where(h => h is 男) がクエリーである。
さらに、Where の後のカッコ内は、ラムダ式と呼ばれる、検索条件である。 「=>」の左にある「h」は、変態の1人を指す。 「=>」の右にある「h is 男」は検索条件である。
※ つまりこれの意味するところは、変態コレクションに含まれる1人の変態を「h」とし「h is 男」の条件を満たす変態を抽出するという事である。
【課題】 var 選ばれし変態たち = 〜 の後を変更してみよう。
var 選ばれし変態たち = 変態コレクション.Where(h => h.嗜好タイプ == spankType.DisciplineSpanking); // 嗜好タイプ=ディシプリンのみに絞り込む
var 選ばれし変態たち = 変態コレクション.OrderByDescending(h => h.嗜好タイプ); // 嗜好タイプで逆順に並び変える
 |
クエリー(LINQ)について構文解説 ( No.49 ) |
- 日時: 2022/10/19 00:15
- 名前: REDCHEEKS
- クエリーの構文については、SQL あるいは LINQ でネットを検索すれば、わんさか出てくるだろうが、ここでは基本的なものについて、エッチな例を交えて説明しよう。
(1) 検索条件の指定(Where)
>>48 で既に例を示しているが、Where は検索条件の指定である。
Where(h => h is 男) ⇒ 男を検索する
Where(h => h.嗜好タイプ == spankType.DisciplineSpanking) ⇒ ディシプリン派を検索する
Where(h => h is 男 || h.嗜好タイプ == spankType.DisciplineSpanking) ⇒ 男またはディシプリン派を検索する
Where(h => h is 女 && h.嗜好タイプ == spankType.DisciplineSpanking) ⇒ 女でかつディシプリン派を検索する
(2) 項目を抽出する(Select)
必要なデータ項目のみを取得する。 あるいは変換を行う。
Select(h => h.嗜好タイプ) ⇒ 嗜好タイプ項目を取得する
Select(h => h as 男) ⇒ 男として扱う(変換する) ※ 女が混じっているなどして変換できなければnullとなりエラーの原因となるため、(3)の複合パターンを使う
(3) where と Select の複合パターン例
Where(h => h is 男).Select(h => h as 男) ⇒ 男性を得る
Where(h => h is 男).Select(h => h as 男).Select(h => h.ちんちん) ⇒ 男性器のみを得る
Where(h => h is 男).Select(h => h as 男).Where(h => h.ちんちん.太さ >= 3) ⇒ ちんちんの太さが3以上の男性を得る
(4) 並べ替え(昇順:OrderBy / 降順:OrderByDescending)
Where(h => h is 女).Select(h => h as 女).OrderByDescending(h => h.おまんこ.感度) ⇒ おまんこの感度順に並べる
|
ディクショナリー(辞書)について ( No.50 ) |
- 日時: 2022/10/31 00:19
- 名前: REDCHEEKS
- クエリの次は、ディクショナリーの話をしよう。
ディクショナリーとは辞書、例えば英和辞典とかがその例である。 「spanking」と英語を入れれば「お尻たたき」と日本語が返ってくる、まさにその機能である。 英和辞典で初めて「spanking」を引いた時のドキドキ感思い出すだろ(笑) そうなんだ「お尻を叩く」んだ! 欧米人はよくやることなんだ!
オブジェクト指向とは直接関係はないが、オブジェクト指向の枠組みのもとに、このような機能が、多数整備されているわけだ。
辞書を使って何をするかって? それは決まっている、翻訳処理である。 もちろん本格的な翻訳は、素人にできるものではないので、ここではお遊びとして、ノムリッシュあるいはアリババ翻訳的なものを例に挙げる。
参考:アリババ翻訳とは http://www2s.biglobe.ne.jp/~nod/nod2/patio/patio.cgi?mode=view2&f=494&no=201
参考:ノムリッシュ翻訳とは http://www2s.biglobe.ne.jp/~nod/nod2/patio/patio.cgi?mode=view2&f=484&no=126
ただ今回は、単に「spanking」⇒「お尻を叩く」では面白くないので、ノムリッシュあるいはアリババ翻訳的なもっと強烈なものを考えよう。
まず、準備として、新たなプロジェクトを作ろう。
http://mediasp.kir.jp/img20220326/imgloglog-box/img20221025161542.png
@「新しいプロジェクトの作成(N)」をクリックする A「C#」「Windows」「デスクトップ」を順次選択する B 表示された一覧の中から「Windows フォーム アプリケーション(.NET Framework)」を選択する C「次へ(N)」をクリックする D「Superアリババ翻訳」と入力する E「作成(C)」をクリックする
次に、画面を作成しよう。
http://mediasp.kir.jp/img20220326/imgloglog-box/img20221025161654.png
@ Form1 が選択されていることを確認し A Text に「スーパーアリババ(ノムリッシュを超える翻訳がここにある)」と入力する B TextBox をマウスでドラッグし、2つ作成する C Button をマウスでドラッグし、1つ作成する D button1 が選択されていることを確認し E Text に「↓ 翻訳」と入力する F 翻訳ボタンをダブルクリックする
さらに、プログラムを作成し、実行する。
http://mediasp.kir.jp/img20220326/imgloglog-box/img20221025161732.png
@ button1_Click() 内に、プログラムを記述する A「開始」ボタンをクリックする B「Spank me daddy please」と入力する C「↓ 翻訳」ボタンをクリックする
「猿ビジネスたたく〜」が表示されればOK(笑)
 |
ディクショナリー(辞書)について(プログラム解説) ( No.51 ) |
- 日時: 2022/11/05 21:11
- 名前: REDCHEEKS
- http://mediasp.kir.jp/img20220326/imgloglog-box/img20221025161732.png
とりあえず、上記の @ で書き込んだブログラムについて解説しよう。
var 変態英和辞典 = new Dictionary<string, string>();
これは、変態英和辞典を作成する処理だ。この時点では単語は全く登録されていない。 次に、変態英和辞典に単語を登録する。
変態英和辞典.Add("spank", "猿ビジネスたたく"); 変態英和辞典.Add("me", "私愚かな"); 変態英和辞典.Add("daddy", "とっつあん"); 変態英和辞典.Add("please", "おねがい");
この例では、直接プログラム上に、"spank" とかの単語を書いているが、これはあくまでもプログラムを説明するための例であって、実際のシステムでは、エクセルなどのファイルから何千何万件のデータを読み込むようにするのが普通である。 以上で、辞書の準備はOK!
次は、辞書を使った翻訳処理である。 まず、テキストボックス1に入力された英文を、単語に分割し、さらに小文字に統一する
var tokens = textBox1.Text.Split(' ').Select(t => t.ToLower());
ここで、Split(' ')とは、空白で区切られた文字列を単語に分割する処理である。 さらに、Select(t => t.ToLower()) は、ばらばらに分割された単語それぞれを、小文字に統一する処理である。 ※ Spank や spank など、大文字小文字が混じっていると、辞書が検索できないため、大文字小文字どちらかに統一する必要がある。
次に、変換した日本語の単語を、まとめて文章にしていくための作業領域を確保する。
var workBuf = new StringBuilder();
StringBuilder とは、文字列の編集を効率的に行うためのクラスである。
そして、すべての単語に対し繰り返すのが以下のプログラム
foreach (var english in tokens)
辞書に登録されているかのチェックも必要だ
if (変態英和辞典.ContainsKey(english))
そして、辞書を使い、実際に英語 ⇒ 日本語変換を行う。
var japanese = 変態英和辞典[english];
結果を追加して行き、文章としてまとめるのは、以下のプログラムである。
workBuf.Append(japanese);
最後に、翻訳内容をテキストボックス2に表示するわけだ。
textBox2.Text = workBuf.ToString();
 |
ジェネリックについて ( No.52 ) |
- 日時: 2022/11/06 08:47
- 名前: REDCHEEKS
- ジェネリックと聞くと、ジェネリック医薬品を思い浮かべるよね。
ところで、プログラムの世界にも、ジェネリックというのがあるんだ。 医薬品とは意味が違うが、でもある意味似たようなものでもある。
例えば、ディクショナリー(辞書)について(プログラム解説)>>51 で
var 変態英和辞典 = new Dictionary<string, string>();
端的に言うと、このプログラムの中で、 <string, string> とあるのが、ジェネリックなのだ。
どういうメリットがあるのか? もちろんメリットがあるからこそ、素人にはメチャややこしく見えるこんな構文が、使われるわけだが、それについて解説しよう。
昔(ジェネリックがなかった時代)は、なんせ大変だったんだ。
英和辞典とかだと、英語も日本語もどちらも文字列だが、辞書と一口に言っても、このような文字列vs文字列、つまり<文字列,文字列>型の辞書ばかりとは限らない。
<数値,文字列>型の辞書もあるかもしれないし、<文字列,数値>型の辞書もあるかもしれない。
また数値と一口に言っても、整数や浮動小数点、倍精度、その他諸々、それらのすべての組み合わせに対し、それぞれ辞書を準備するのは大変である。
さらに辞書に限らず、並べ替え処理や、その他の処理にも、こういう問題が常に付きまとう。
これらの問題を解決するのが、ジェネリックなのだ。
ジェネリックは、従来のオブジェクト指向と組み合わさる事で、さらに強力な機能となる。
なんせ、<string, string> や <int, string> だけでなく、<string, 人> つまり「人オブジェクト」も辞書に組み込むことができるのだ。
人そのものまで辞書に組み込んでしまう、そこがオブジェクト指向のすごいところでもある。
というわけで次に「Iえっちインターフェース」を持った人の辞書について、エッチスケベな例を示そう。
|
ジェネリックについて(エッチな例) ( No.53 ) |
- 日時: 2022/11/10 23:44
- 名前: REDCHEEKS
- http://mediasp.kir.jp/img20220326/imgloglog-box/img20221105222719.png
「課題H」に以下の変更を加える。
@ 変態コレクションを使った処理をすべてコメントにする。 A 変態辞書を使った処理を追加する。 B「課題H」を実行する。 C おしおき() と おなに() が、REDCHEEKS に対して実行されること(ざんちゃんに対しては実行されないこと)
ブログラムの解説については、プログラム中のコメント(緑色文字部分)を読めばわかるよ、興奮してきたかい?
以上、ジェネリックに関する "エッチな" 説明はいかがだっただろうか?
p.s. おしおき() と おなに() はどちらも、Iえっちインターフェースで定められた必須項目。 苦痛と快感は、どちらも官能なのだ。 ヒリヒリするお尻をさすりながらの、おなに() は最高だね 
p.s.(2) ここで検索キーに使っている "劣度" というニックネーム、気に入っているよ。 2ちゃんの誰かがつけてくれたあだ名だけど、そりゃもうオレってお下劣度No.1だもんな。 ほんま最低のお下劣お下品、でもそれがたまらなくいいんだな、この文章書いているときも、ちんちん立ってるよ。 そしてフィニッシュは、例のビデオ、アンクルジョージ、女の子のおしおき見ながらおなにするんだ。 真っ赤に弾けるしりっぺのダンス、そのチラリズムを眺めながら、今でも毎日おなに()しこしこどびゅ〜やってるよ  女の子がヒップダンスの最後に「ノ、ノ、ノゥ〜」と言う瞬間に合わせて出せたらサイコー、これぞ生きる喜び若返りの秘訣 
|
ビット演算について ( No.54 ) |
- 日時: 2023/03/19 23:23
- 名前: REDCHEEKS
- 以前に >>47 で説明した、列挙型(enum型)について、これは便利な機能ではあるが、1つ弱点がある。
それは、複数選択ができないという事。 例えば、 "おねしょ" と "ショタ" という項目があったとき、選択できるのはどちらか1つ、両方選ぶことができないということだ。 その弱点をカバーするのが、ビット演算である。
このビット演算というのは、基本情報技術者試験にも出てくるよ。 http://ja.wikipedia.org/wiki/%E5%9F%BA%E6%9C%AC%E6%83%85%E5%A0%B1%E6%8A%80%E8%A1%93%E8%80%85%E8%A9%A6%E9%A8%93 http://www.jitec.ipa.go.jp/1_11seido/fe.html 基本情報技術者試験の試験勉強というと、ふつう眠くなるが、REDCHEEKSのスパプログラミング講座は、下ネタ満載ちんちん勃起するから、全然眠くならなくていいだろ(笑) そうなんだ、勉強はちんちん勃起させてやるのが効果的なんだ。 太いちんちんお役立ち! というわけで、さっそく解説を始めよう。
まず、画面の作成だが、以前にディクショナリー(辞書)の説明 >>50 で使った「Superアリババ翻訳」のプロジェクト画面をそのまま流用する。 以下のプログラム修正を行うだけでオッケーだ。
http://mediasp.kir.jp/img20220326/imgloglog-box/img20221108193237.png
@ button1_Click() 内のプログラムをすべてコメント化する。 A ビット演算のプログラムを追加する。 B 「開始」ボタンをクリックする。
動作確認は、以下の通り。
1を入力して翻訳ボタンをクリックすると「おねしょ検出」と表示されること。 2を入力して翻訳ボタンをクリックすると「ショタ検出」と表示されること。 3を入力して翻訳ボタンをクリックすると「おねしょ検出ショタ検出」と表示されること。 7を入力して翻訳ボタンをクリックすると「おねしょ検出ショタ検出射精検出」と表示されること。
プログラム解説
まず、if ((bits & 0b00000001) > 0) のなかで、 0b00000001 これ2進数なんだな。 最初に、0bと来ると、コンピューターは2進数と判断するんだ。 2進数って学校で習ったよね? コンピュータ内部は基本的に電気の ON と OFF しかない、0 か 1 かの2進数の世界なんだ。 0bに続く8桁の数字、これ2進数が8桁、8ビットのデータが集まって、1バイトのデータになるんだ(byte 型)。 アルバイトじゃないよ、8ビットひとかたまりのデータを1バイトという。
さらにプログラムを見ていくと、 0b00000001 と、1番右端だけが、1 になっているのが、おねしょ検出用のマスク 0b00000010 と、右から2番目だけが、1 になっているのが、ショタ検出用のマスク 0b00000100 と、右から3番目だけが、1 になっているのが、射精検出用のマスク
ところで "マスク" って何? それはタイガーマスクのマスク、コロナでおなじみになったあのマスクと同じだな、要するに顔を覆い隠し一部だけ出すもの。 つまり、(bits & 0b00000001) とは、bits というデータを覆い隠し、右端のビットだけを取り出すという意味。 つまり、if ((bits & 0b00000001) > 0) とは、右端のビットが 1 かどうか判定しているということだ、そこに 1 があれば、おねしょが検出されるわけだ。 同様に、if ((bits & 0b00000010) > 0) とは、右から2番目のビットが 1 かどうか判定しているということだ、そこに 1 があれば、ショタが検出されるわけだ。 では、右端と右から2番目が、両方とも 1 だったら、おねしょとショタが両方検出される、つまり「おねショタ」が検出されるわけだ。 このように、列挙型(enum 型)とはちがって、ビット演算を使えば「どちらか1つではなく両方選ぶことができる」つまり「おねショタ」という性癖もデータとしてコンピュータに登録できるようになるということだ。 まとめると、
1 --> 01 おねしょ 2 --> 10 ショタ 3 --> 11 おねショタ
まさしく、2進数そのものだね。
ps. ちなみに 7 を入力すると「おねしょ検出ショタ検出射精検出」になるのはわかるよね? 7 は2進数に直すと、111 つまり、3つともそろっているわけだ 
p.s.(2) とりあえずボクの大好きな「射精」を3ビット目に追加したが、皆さんも、右から4ビット目以降で、自分の好きな性癖を検出するプログラムを追加し、いろんな数字を入力して遊ぼう。
 |
ビットシフトについて ( No.55 ) |
- 日時: 2022/11/21 00:39
- 名前: REDCHEEKS
- 引き続き、今回は、ビットシフトの話をしよう。
前回 >>54 の例だと(http://mediasp.kir.jp/img20220326/imgloglog-box/img20221108193237.png) 検出項目が増えるごとに、if 文が増えて行くので、あまりよくない。
そこで、繰り返しループを使ったプログラムに書き換えよう。
http://mediasp.kir.jp/img20220326/imgloglog-box/img20221120234834.png @ おねしょ検出、ショタ検出、射精検出の if 文をコメント化する。 A 同様の処理を、繰り返しループを使って書き直す、ついでに、カー、キー、スパンコも追加する。 B 「開始」ボタンをクリックする。 C 63 と入力する。 D 「翻訳」ボタンをクリックする。 E すべてが検出されること。
ここで、カギになる技術が「ビットシフト」なんだな。
mask <<= 1; // 1ビット左シフトして、次の変態へ
これは要するに、
00000001 ↓ 00000010 ↓ 00000100 ↓ : 10000000
とビットを右から左へ、1つずつ、ずらして行くのだ。
1つずつ、ずらしながら、変態趣味を照合して行くのだ。
ビットシフト面白いだろ。 ビットを自在に操れるだろ。
p.s. オレって自縛趣味はないけど、自分を調教する趣味があるんだな。 もし来世マトリックスで蘇る事ができたら...ビットを自在に操って、自分の尻叩いて調教するプログラム作ってみたいね。
p.s.(2) ちなみに、byte は、8ビットなので、カー、キー、スパンコも追加した上記の例だと、あと2つで終わりだが、 他にも ushort(16ビット)や、uint(32ビット)や、ulong(64ビット)があるから、大抵の変態趣味はOKだね 
|
数学関数について ( No.56 ) |
- 日時: 2022/11/28 00:05
- 名前: REDCHEEKS
- ビット演算 >>54-55 では、学校で習った2進数が出てきたね。
では、同じく学校の数学で習った、サイン、コサインはどうするかって? もちろんコンピュータだからできるけどね、ただ、Sin とか Cos とか、プログラムに書いてもだめだよ。
まあ実務ではあまり使わないが、一応説明しておこう。 せっかく学校で習ったんだから、使ってみたいだろ。 まず、数学関数は、Math を付けないとダメなんだね、Math.Sin とか、Math.Cos とかね(ちなみにMath とは Mathematics=数学の略) というわけで、また新たなプロジェクトを作ろう。
http://mediasp.kir.jp/img20220326/imgloglog-box/img20221025161542.png プロジェクトの作成は「Superアリババ翻訳」の時と同じだよ。 ただし、プロジェクト名の D は、「Superアリババ翻訳」ではなく「肉振動」と入力する。
****************************** 肉振動 またエッチな話が始まるよ。 ******************************
http://mediasp.kir.jp/img20220326/imgloglog-box/img20221127223313.png @「プロパティ」ボタンをクリックする。 A Text に「ぱっしーん、ぷるぷるん」と入力する B「イベント」ボタンをクリックする。 C「Paint」を "ダブルクリック" する。
http://mediasp.kir.jp/img20220326/imgloglog-box/img20221127232402.png @ Form1_Paint 内に、プログラムを記述する。 A「開始」ボタンをクリックする。 B「ぱっしーん、ぷるぷるん」ウインドウが開き、波形が表示されればOK
※ ぱっしーん、ぷるぷるん...盛り上がった焼き豚のように分厚い尻肉は最高、思う存分叩いてやりたい 
※ プログラムの解説は、後日
|
数学関数について(プログラム解説・課題) ( No.57 ) |
- 日時: 2023/01/23 21:48
- 名前: REDCHEEKS
- (1) Point? startPoint = null; // 始点(初期値は未設定)
Point? startPoint とは、始点(X座標, Y座標)の事だな、繰り返し処理(for文)の外で定義しているのは、繰り返し処理の中で前回の終点を次の始点として保存しておくため(繰り返し処理の中に書いてしまうと保持できない) 但し、そのため、一回目は、値が入っていないので、それを示すため、null を設定する。 null を設定するため、変数の型は、Point ではなく Point? を使う。 (? がついていると、null が許容される、つまり Nullable なわけだ)
(2) var pen = new Pen(Color.Red, 5); // ペンの色と太さを設定する
線の色と太さを設定する、REDCHEEKS は太い "真っ赤な" 赤が大好き。
(3) for (double x = 0; x < Width; x++) // 表示されたウインドウの幅(Width)繰り返す
ウインドウの幅(Width)分繰り返す、数学関数を使うときは、倍精度浮動小数点(double)型を使う。
(4) double y = 0;
y座標にも同様に、倍精度浮動小数点(double)型を使う。
(5) 数学計算を行う y += Math.Sin(x / 30) * 0.8; // 波動1を追加する y += Math.Sin(x / 20) * 0.3; // 波動2を追加する y *= Math.Pow(0.998, x); // 減衰計算
まあこの辺の数式は、イメージして、適当に試すとよい。 お尻のお肉は左右に割れているから、色々な振動があるだろうね 
(6) Y座標の符号反転 y = -y; // 符号反転(数学のY座標は、上がプラスなので)
数学の座標系と、コンピュータの座標系は異なるため変換する(X座標は同じだが、Y座標は異なる)。 プリンタ印刷の関係から、コンピュータのY座標は、下の方がプラス、それを数学の座標(上がプラス)に合わせるため。
(7) その他、微調整 y += 1; // ウインドウの高さの中に入るように調整 y *= (Height / 2); // ウインドウの高さ(Height)の中に入るように調整
ウインドウは、左上が原点(0,0) のため、ウインドウの範囲に表示するための各種調整
(8) 終点(X,Y)の設定 var endPoint = new Point((int)x, (int)y); // 終点
ここで、(int) とは、倍精度浮動小数点(double)型 を 整数(int)型に変換している。 数学関数には、倍精度浮動小数点(double)型が必要だが、画面表示には、画面のドット以下(小数点以下)は不要のため、切り捨てる。
(9) if (startPoint.HasValue) // 始点が設定されている場合 始点は前回の終点を使うため、最初の一発目は、値が入っていない。 エラー発生を防ぐため、始点が設定されている場合のみに制限している。
(10) e.Graphics.DrawLine(pen, startPoint.Value, endPoint); // 線を引く 始点から終点に線を引く、ここで startPoint は、endPoint と違って、.Value がついていることに注意、これは null が許容される型を使っているためである。
(11) startPoint = endPoint; // 次の始点として、現在の終点を設定する 次の始点として、現在の終点を設定する(代入時の startPoint の .Valueは、省略可能)
【課題】ぱっしーん、ぷるぷるん...(5) の数式を調整して、お好みの肉振動を合成しよう 
p.s. それでバイブレータをしこしこ作動させ "三角関数を調整しながらお好みの肉振動を作り出し" 射精出来たら最高だね  麻生太郎さんは国会で「三角関数なんて使わない」なんて言っていたけど、三角関数でおなに()は最高 
 |
数学関数について(課題解答例・解説) ( No.58 ) |
- 日時: 2022/11/30 20:49
- 名前: REDCHEEKS
- http://mediasp.kir.jp/img20220326/imgloglog-box/img20221130130435.png
@ 以前の数式をコメント化する。 A ポーの水車小屋をイメージした肉振動の計算式を記述する。 B「開始」ボタンをクリックする。
尻を突き出す動きに合わせてのピストン運動に加え、つんのめる尻肉全体の振動、さらに左右の表皮がタタンと弾ける痛々しい振動が、グラフ化されればOK。 あとこれをバイブレータに連動すれば、ポーの水車小屋を堪能できるわけだ。
なお、Aのプログラムの先頭で、Math.PI というのが出てくるが、これは円周率 3.14 である。 サイン、コサインで使う角度の単位は、度ではなくラジアンなので、その変換用である(πラジアン = 180°)。 ぱっしーん、ぷるぷるん、円周率 3.14 まぁるいお尻はいいね 
p.s. 一つ目のレバーを倒すとシコシコが始まり、二つ目のレバーを倒すと、... タタン、... タタン、子供たちが最も恐れていた事が始まります。 亀頭でそれらを感じ取りながらも、罰が甘くならないように出来る限り堪え、うんと懲らしめるのが貴方の使命です。
<以下ポーの水車小屋より引用> 尻を突き出す動きに連動して、ピストン運動がシコシコ繰り返されるとは、ホントもう最高傑作です。 まっ、複数の少女を使うから、それが可能になるんでしょうけど... それにしても、よくもまあ、こんな機構を作り出したものです。 おまけに肉の振動が、心地よく伝わって来る......もうたまりません!! ピストン運動に加え、肉の弾けるイメージ、フィニッシュは時間の問題です。
いえいえ、この子たちの将来のためにも、そう簡単には許しません、私としては出来る限り辛抱します。 でもいつかは辛抱できなくなる時が来ます。 もっとも、それがいつなのか、正確な事は私にも予測できないし、自分の意志では制御出来ません。 神のみぞ知る自然の摂理! 私はただただ、一人一人の泣き顔、打たれる瞬間の表情をじっと見つめながら、その摂理に身を委ねるだけなのです。 神様が堪忍して下さる「そのとき」まで、固く閉じられた水車小屋では、厳しいお仕置きが続くのです 
|
《コラム》 Cの封印された技術 ポインタ ( No.59 ) |
- 日時: 2023/02/14 21:23
- 名前: REDCHEEKS
- 昔のC言語には、ポインタというのがあったんだな。
これは非常に性能が良かったんだけど、危険なので、封印されたんだ。 だから最近のプログラム言語である、C# や Java にはポインタはない。 もっとも、表には出てこなくなったが、内部的にはあるんだな。 だから、より深く理解するためには、ポインタの理解が必要なんだ。
そもそもポインタとは何か、それは情報がどこに書き込まれているかを示す(ポイントする)情報なんだ。 そもそもポインタがないと、文字列の処理はできない。 数値の場合と異なり、文字列には、長いものや短いものがある、コンピュータにとって、数値の扱いは簡単だが、文字列の扱いは、苦手で厄介なものだ。 数値の場合は、データのサイズが決まっているので、100個目の数値を取り出そうとすれば、データのサイズ×100でその位置がわかる。 ところが、文字列の場合は、長いものや短いものがあり、長い文字列があると、その後ろはずれて行くので、単純には計算できない。 そこでポインタが必要になる。 100個目の文字列を取り出そうとすれば、ポインタのサイズ×100でポインタの位置を計算しそのポインタに書き込まれている情報をもとに、さらに文字列の位置を見に行くという2段階の処理が必要になる。 まあ、文字列に限らず、長さが色々あるデータを扱うには、ポインタが必要だ。 エッチな例で言うと、男と女では、ついているモノも違うし、データの長さは異なるので、ポインタは必要だ。 たとえば、
var red = new 男();
この例で説明すると、男クラスで定義された男情報を保管するメモリの領域の位置情報を red という変数に入れるわけだ。 だから、red という変数には、REDCHEEKS のちんちんの長さとか、そんな情報ではなく、まずREDCHEEKSに関する情報が書き込まれている位置が、数値として入っているだけである。 コンピュータは、その位置情報(ポインタ)をもとに、その位置のデータを取得し、そこからさらにちんちんの長さを得るわけだ 
|
《コラム》 Web系エンジニア ( No.60 ) |
- 日時: 2023/03/27 00:41
- 名前: REDCHEEKS
- 最近はAIだとか、Web系エンジニアに転職するとか、ユーチューブでもよく見かけるね。
http://www.amazon.co.jp//dp/4408339334
たしかに花形だけど、勉強する事は山ほどあるし、競争も厳しいね。
別に花形でなくても、他にも仕事はいっぱいあるけどね。
まあオレはもう引退間近でちょっとついていけない面もあるけどね。
これから老後やるとしたら、Unityでゲームを作る事かな、ポーの水車小屋の回転テーブル作りたいね。
グイっと持ち上げられた生尻、ケツの割れ目を、タ、タン、弾ける左右尻肉のイメージをVRで堪能してみたい 
**************************************** "うんと懲らしめる" "しっかりがまん" は最高だね  ****************************************
p.s. でもゲーム業界も、趣味のうちは良いが、仕事になると厳しいね 
p.s.(2) AIだとか、Web系エンジニアとか、尖った技術を求めるよりも、管理者になれ、上流工程をやれ、プロジェクトマネージャになれという人もいる。 http://www.youtube.com/watch?v=jYrHWMsjIXs たしかにプログラマなんて所詮は I T 土方だけどね。 でもそのプログラマにすらなれない人もいっぱいいる。 上記URLの人が言っているように、一兵卒のプログラマよりも、将校になれっていうのは確かにその通りなんだが、将校になれるのは、限られたエリートだけだ。 とはいえいまどき仕様書通り作るだけのプログラマなら、安くて優秀な中国人いくらでもいるのも事実、何らかの付加価値が必要だ。 プログラミング + 付加価値 が必要だな。 まあオレはそれで何とか食ってきたわけだが...でもこの先AIがどんどん発展して行ったら、最終的に人間に残る付加価値は "変態" しかなくなるんじゃないかな 
|
ヌルポインタの話 「尻 が null でした。」 ( No.61 ) |
- 日時: 2023/03/26 12:02
- 名前: REDCHEEKS
- >>59 のコラムで、封印された技術、ポインタの話をしたが、封印されたとはいえ、今でも一部エラーになることがあるんだな。
それがヌルポインタなんだ、よく出るエラーなので、説明するよ。
まず、説明のために、わざとエラーを出してみよう。
http://mediasp.kir.jp/img20220326/imgloglog-box/img20230326120104.png
@ 課題H の、人クラス内で、 protected けつ 尻 = new けつ(); の先頭に、// を書き込み、プログラムをコメント化(無効化)する。 そして次の行に、 protected けつ 尻; と書き込む。
A 「課題H」ボタンをクリックし、プログラムを起動する。
B 男クラスのおしおき()メソッド内の、尻.ぺんぺん(); の行が反転表示され、赤色で × が表示され、ブログラムが停止する。 表示されるエラーメッセージは以下の通り、
> 例外がスローされました > System.NullReferenceException: 〜 > 尻 が null でした。
(解説は次回)
|
ヌルポインタの話 「尻 が null でした。」 (解説) ( No.62 ) |
- 日時: 2023/03/29 10:49
- 名前: REDCHEEKS
- >>61 の続き(解説)
そもそも、 protected けつ 尻 = new けつ();
というブログラム、左辺にも右辺にも尻やけつがあって、尻の臭いプンプン、何をしているやらよくわからないという人への補足説明も兼ねて、ヌルポインタの話を続けよう。
そもそもこのプログラム、1行に書いているが、やっていることは2つ、以下の (a) (b) の2つに分けた方が分かりやすいだろう。
(a) protected けつ 尻;
(b) 尻 = new けつ();
************** まず (a) について、 **************
これは "尻" という名前の、ポインタを定義している。
ここで、protected は、公開範囲で、今回の話題とは直接関係ないが、身内内での公開を意味する。
"尻" は、実際のデータが保存されている場所を示すポインタである。 初期値は、ゼロ(ヌル)である。
"けつ" は尻のデータ構造を示すクラス(設計図)で、右尻、左尻、ぺんぺんなどの要素が定義されている。
※ "尻" ポインタが指し示すデータをアクセスするときは、"けつ" クラスで定義されている構造(テンプレート)を当てはめて今後解釈する。
************** 次に (b) について、 **************
尻のデータ構造を示すクラス(設計図)である "けつ" に従い、メモリ領域を実際に確保し初期化(new)したのち
その位置を尻(ポインタ)に設定している。
※ これにより、尻ポインタからたどって、右尻、左尻、さらにそれらの色を記憶するメモリ領域が確保されたわけだ。
****************** なぜエラーになったか? ******************
>>61 でやったことは、(a) だけにしてしまったからだ。
つまり(b) がなくなった結果、尻(ポインタ)は、初期値ゼロ(ヌル)のままとなり、尻ポインタからたどって、右尻、左尻、さらにそれらの色を記憶するメモリ領域をアクセスしようとする処理が不可能になったのだ。
|
ヌルポインタの話 尻 ++; ( No.63 ) |
- 日時: 2023/03/30 22:50
- 名前: REDCHEEKS
- >>62 の続き
でも、昔のC言語は、もっと危険だったんだな。
尻ポインタの値を+1するなど変更して、つまり、
********** 尻 ++; **********
これで、隣の尻をさわりに行く事もできたんだ。
C言語は非常に速く、何でもできるんだけど危険で、1つ間違えると、データを破壊しシステムを停止させてしまうんだ。
|
ヌルポインタの話 (Hな課題) ( No.64 ) |
- 日時: 2023/03/28 01:28
- 名前: REDCHEEKS
- まず、>>61 で加えた変更を元に戻し、エラーが出ない状態に戻そう。
次に、REDCHEEKS のちんちんを null にして、試してみよう(ちんちん が null でした。)
|
エラー(例外処理)について ( No.65 ) |
- 日時: 2023/03/29 10:56
- 名前: REDCHEEKS
- 現代のモダンなプログラム言語では、エラーの事を、例外(Exception:エクセプション)と呼ぶ、その構文についてこれから説明しよう。
通常はエラーが発生すれば、特にエラー処理をプログラムしなくても、エラーメッセージが自動的に表示され、プログラム終了するようになっている。
ではなぜエラー処理の記述が必要かというと、エラー処理を記述すると、修復したり、再試行したりする事ができるためである。
あるいは表示されるメッセージが利用者に分かりにくい場合、エラー処理を記述する事で、利用者に分かりやすい気の利いたメッセージに置き換えることもできる。
自分が使用するだけのプログラムでは、そこまでは要求されないが、売り物のプログラムにおいては、エラー処理の記述は常識である。
構文は、下記のような、トライ 〜 キャッチ 〜 ファイナリー 構文となる。
try { (試す処理) } catch { (エラーが発生した時の処理) } finally { (エラーが発生するしないにかかわらず必ず行う後始末処理) }
※ このうち、catch と finally は、どちらか一方を省略してもよい。
例えば、ちんちん.しこしこ() という処理があり、たまに 「ちんちん が null でした」 というエラーが発生する場合、
try { ちんちん.しこしこ(); } catch { Console.WriteLine("【エラー】ちんちんがありません。 性転換した可能性があります。"); }
という風にプログラムを組めば、よりユーザーフレンドリーになる。
というわけで、ヌルポインタの話 (Hな課題) >>64 の回答も含めて、次に実例を示す。
|
エラー(例外処理)について(実例) ( No.66 ) |
- 日時: 2023/03/29 00:29
- 名前: REDCHEEKS
- http://mediasp.kir.jp/img20220326/imgloglog-box/img20230329002105.png
@ REDCHEEKS のちんちんを null にする(課題>>64の解答) A ちんちん.しこしこ() 処理を、トライ〜キャッチで包む。 B 課題Hをクリックし起動する。 C 「ちんちん が null でした。」の例外発生 D 続行をクリックする。 E Aで置き換えたエラーメッセージが表示されればOK
|
「値」と「参照」の話 ( No.67 ) |
- 日時: 2023/04/23 12:33
- 名前: REDCHEEKS
- コラムにも書いた通り >>59 >>63 ポインタはあまりにも危険なので封印されたが、より安全なものに形を変えて今でも存在する。
それが参照なんだ。
そして、コンピュータ処理においては、単一の数値のような小さなデータを除けば「参照」が基本になっている。
なぜなら、大きなデータを「参照」ではなく「値」で渡そうとすると、多量のデータをコピーせねばならなくなり、多量のメモリやCPUパワーを消費するからだ。
いくらメモリやCPUが安くなったとはいえ、これでは具合が悪い。
なるべく動かさないで済むものは、動かさない方がいいね。
どこにあるかという情報(ポインタ)さえ渡せばそれでいいのだ。
そもそも文書で「〇〇を参照」と書けばいいのを、そこにいちいち全文コピーする人はいないだろう。
但し、参照には、副作用がある、特に参照先に、書き込み変更を加える場合だ。
ということで、以前からの続き、課題H を使ってまたエッチな話をしよう。
************************************* じじぃはエッチが好きだよ > 妄想プロファイラー君 *************************************
http://mediasp.kir.jp/img20220326/imgloglog-box/img20230422112631.png
@ 課題Hの、Main() 関数内の、red を定義している部分だけを残し、それ以外を(コメント化するか又は)削除する。 A 人クラスに、ICloneable インターフェースを追加する(これで人もクローン可能になる)。 B Clone() メソッドを実装する。 C 現状報告 メソッドを実装する。 D red をクローンして、クローン人間 red2 を作り、名前を REDCHEEKS(2) とする。 E 原本の red をお仕置きし、red と red2 に、現状を報告するようにプログラムする。 F 「課題H」をクリックし実行する。
G 2人ともお尻が真っ赤になってしまう。
お仕置きされたのは、red だけなのに、red と red2 ともに真っ赤になったのは、同じ尻を参照し共有しているからだ。 この現象を見て、あなたはどのような状況を思い浮かべるだろうか、共通の尻を持つ、シャム双生児のような状況ではなかろうか?
※ シャム双生児といえば、ベトナム戦争の「ベトちゃんドクちゃん」が有名だね。 http://ja.wikipedia.org/wiki/%E7%B5%90%E5%90%88%E5%8F%8C%E7%94%9F%E5%85%90
この問題を解決するには、B を修正する。
以下に示す通り「クローン人間のために新しい尻を作成し参照させる」機能を追加すればよい。
*************************************************************************** /// <summary> /// クローン人間を作成する /// </summary> /// <returns></returns> public object Clone() { var クローン人間 = (人)MemberwiseClone();
クローン人間.尻 = new けつ(); // クローン人間のために新しい尻を作成し参照させる【追加】
return (object)クローン人間; } ***************************************************************************
これで分離手術はOKだ。
 |
《コラム》 エンジニア転職ブーム ( No.68 ) |
- 日時: 2024/10/03 00:02
- 名前: REDCHEEKS
- 最近は、学校教育でプログラミングが必修になったこと、それに加え不景気就職難、さらにIT業界は人材不足という話もあり、エンジニア転職がブーム、それに付け込んで、サムライ商法ならぬ悪徳パソコンスクールとかも流行ってくる。
もちろんパソコンスクールのすべてが悪いわけではないが、よく考えた方が良いだろう。
なかには女性限定のスクールもあるようで、ネット上で叩かれている。
そもそも女性に限定する事に何の意味がある、それに最近はやりのLGBTトランスジェンダーはどうなる、というツッコミはさておき、体験談を読んでみると「あまりにも難しくて泣いちゃいました」女の子を泣かしてどうするんだ。
そもそも上を目指し過ぎじゃないかな、最初はIT土方で良いんだよ、最初から監督を目指すなんて不遜すぎる。
その点、スパ・プログラミング講座は良いと思うよ、まず無料だし、難しいプログラミングの概念を「えっち」に例えることで、分かりやすく解説している。
なんせ「えっち」は、生命が誕生してから数十億年、シコシコ磨かれ続けてきたインターフェースであり、最強のエネルギー源である。
スパ・プログラミング講座は女の子にも充分お勧めできる講座である。
ただこれだけは覚悟してね、
***************************** ちんちん.しこしこ() で泣かないでね  *****************************
|
《コラム》 クラウドって素晴らしい ( No.69 ) |
- 日時: 2024/08/04 21:43
- 名前: REDCHEEKS
- クラウドって良いよね、身近なところではアイクラウド。
アイフォンで撮った写真が、自動的にサーバーにバックアップされ、アイフォンが壊れようが、アイフォンを失おうが、撮った写真は大丈夫って奴。
ウィンドウズパソコンの場合は、OneDrive(ワンドライブ)、雲のマークだな。 http://www.microsoft.com/ja-jp/biz/smb/column-onedrive そこにデータを入れておくと、自動的にサーバーにバックアップされる。 パソコンが壊れようが、火事で焼かれようが、津波に流されようが、これで大丈夫、心おきなく避難できる。
クラウドは雲のマークだが、空にサーバーがあるわけではない。 実際は災害の影響を受けにくいどこかの頑丈なビルに、しかも複数個所に分散され保管されている。 http://ja.wikipedia.org/wiki/19%E3%82%A4%E3%83%B3%E3%83%81%E3%83%A9%E3%83%83%E3%82%AF%23/media/File:Wikimedia_Foundation_Servers-8055_23.jpg
クラウドはデータの保管だけでなく、プログラムや機能も利用できる。 ワンドライブの上級版である、Azure(アジュール)というのを使えば、必要な時に必要な性能のパソコンをバーチャルリアリティ的にレンタルできるから便利。 http://azure.microsoft.com/ja-jp/get-started/azure-portal/
これまではパソコンを何台もレンタルしようとすると、置き場所や電源等の確保が大変だったが、クラウドだとパソコンが一台あれば、そこから何台でも遠隔操作できるのだ。 しかも料金は使った性能の分だけなので格安、パソコンを物理的にレンタルする場合とは異なり、輸送時間もかからない。
いずれそのうち、人間もクラウドにつながるんじゃないか? そうなれば、もう死ぬことはなくなる。 体が壊れても、体を失っても、精神はクラウドの中で、永遠に生き続けられる。 まさしくマトリックスの世界だ。
脳を冷凍し記憶をクラウドに保存!?「 Nectome」-謎のスタートアップ http://seattle-gakusei.com/nectome_startup/
そのような死生観を持ったゲームもあるよ、ニーア・オートマタがそれだな。 http://www2s.biglobe.ne.jp/~nod/nod2/patio/patio.cgi?mode=view2&f=494&no=203
でもねえ、クラウドは天国とは限らないんだな。 ニーア・オートマタのように、戦争に駆り出される事はないにしても、クラウドを維持するには莫大な金がかかる。 専門知識を学び、しっかり働いて稼いでもらうのは当然だ。 当然の事ながら真面目に勉強しない奴、働かない奴はオシオキだ。 http://animeotk.com/gallery/showphoto.php/photo/7632/title/page-11/cat/667 http://animeotk.com/gallery/showphoto.php/photo/7636/title/page-51/cat/667 痛ーいバーチャルムチを受けるようになるだろうね  つまり人間精神がネットワークにアップロードされ、人間AIが誕生すれば、怠けないように制御するためのムチが必要だということだ。
まさしく「お尻一発ボタン」が現実のものに... http://www2s.biglobe.ne.jp/~nod/nod2/patio/patio.cgi?mode=view2&no=119&f=494
まっ、クラウドの住民になり永遠の命を得るためには、イッターイ↓これを受け入れられるかどうかが条件だな。 http://mediasp.kir.jp/img20220326/imgloglog-box/img20200811003105.jpg
*********************************** 原子炉内の燃料棒のように真っ赤に燃える。 ケツマッカ・シンギュラリティは近い  ***********************************
 |