Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
With ~ End With内で構造体の値を確認するには?
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30562#CommentId84277
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
タカジィ
 (社会人)
投稿日時
2020/10/30 17:55:52
再度の、魔界の仮面弁士さんのご回答、ありがとうございました。
●先にメールへの返信…のようなモノを書きます。
>1982年: OA-BASIC ※独学:最初に触ったプログラム言語
全然知らない名前なので、Webで見たら東芝パソピアなんですね。
私はビンボーだったので(今も昔も)「FM-7」(富士通=タモリが宣伝)でスタート。
当時ホントにビンボーで、買う前の1年間、キーボードの実物大写真(NHK入門講座の本に見開き付録)を机に広げ、練習してました(懐)
それにしても魔界の仮面弁士さんは「Professional」→「Enterprise」→「Subscription」…と、快調に「おカネ持ち街道」をひた走り…されたことが、容易に想像できます。
スレッドの件(なんとなく)わかりました。
新PCに変えたらバグがなくなる…なんてハズはないので、今後も注視していたいと思います(笑)
●さて、お二人に「With」の見やすさを例示して、最後に一矢、報いたいと思い…
見本になるモノは… 何かないかと… 探してたら~ ♪あった!
※ちょうど、さっきから、BGMがYouTubeで♪「悲惨な戦い/なぎらけんいち」(世代が違いますね)
↓るきお(管理者)さんのお手本(RPGSample>SoundComposer.vb)より引用 ※以降、動作はすべて未検証
Public Sub New(ByVal music As Musics)
Select Case music
Case Musics.A
FileName = "button-22.wav"
Case Musics.B
FileName = "button-23.wav"
Case Musics.Field
:
↓With の使用例 ※私はこっちが見やすい(認識しやすい)と思うのですが…?
Public Sub New(ByVal music As Musics)
With Musics
Select Case music
Case .A
FileName = "button-22.wav"
Case .B
FileName = "button-23.wav"
Case .Field
:
↓さらに、私には(今では「絶対やめろ」と言われてる)「マルチ」のほうが、断然…
Public Sub New(ByVal music As Musics)
With Musics
Select Case music
Case .A : FileName = "button-22.wav"
Case .B : FileName = "button-23.wav"
Case .Field ←文字数が違うケースがあるとダメですね(笑)
:
※上の文字数の違うケースのような場合、見やすくするためになら(文字数をムリにでも合わせるためなら)、私は日本語を使うことをいとわない(更なるガラパゴス化?;笑)
例:
With Cast(n敵ボス)
Select Case course
Case nt左へ : .X -= 1
Case nt右へ : .X += 1
Case nt上へ : .Y -= 1
:
※上記「nt左へ」などは定数 ※Enumは使わない ※「n」はnmb=integer 「t」はテンキーで方向指示(左=4、右=6 … ←ガラパゴス化極まり?)
●反対に 業界の方が With を使う頻度が少なくなった(かも知れない)理由も一つ見つけました。
私の理解してる「構造体」と、通常に多用される(?)構造体とは、意味が違ってたみたい?
・私の知識の「構造体」は、VB6で「単純な変数を収納したモノ」→ .NET にそのまま移行し、配列などにして使用
・通常の構造体は Location とか Point など、関連性の高い変数をまとめたモノ(しかも階層的に?)(←あくまで私の解釈)
↓るきお(管理者)さんのお手本(RPGSample>FieldContextObject.vb)より引用
Public Sub PlayerUnit_Stepped(sender As Object, e As SteppedEventArgs)
:
Select Case Player.MapPoint
Case New Point(32, 100)
LoadMap("Home.map")
Case New Point(105, 79)
LoadMap("Teracotta.map")
:
私は「Point」という名称が座標値(X,Y)関連とは、どうしても認識できない(英語がダメだから?)ので、無視してた(使えない)のでした(笑)
上のような使い方( Case New Point(32, 100) …等)は想像もつききませんでした。
このような比較では if文を使うことしか考えられなくて。
その上で「With」を使うと、見やすくなったのでした。
With Player
if .MapPointX = 32 AndAlso
.MapPointY = 100 then
:
●結論?
どうやら、最新のVBプログラミングを理解するためには、魔界の仮面弁士さんご指摘の「クラスと構造体の違い」を本格マスターする必要がありそうです。
別サイトの記事をチラと見たら、構造体の中で「set」すれば初期化できるみたいで、これも新発見(笑)
これを使うと「With」の使用頻度も少なくなりそう?
ありがとうございました。
(またもやダラダラと長文になってしまいました。お許しを)
タカジィ
今回も追伸を…
魔界の仮面弁士さんのお手本からも、何かないかと…さがしたのですが… なかった …どころか、またびっくりで。
投稿欄の、お隣さん(高校生みたい)への回答メールに、参考プログラムのURLがあったのでノゾいたら、驚愕。
ttp://www.vb-user.net/junk/replySamples/2010.02.08.14.53/Clipping.txt
・この「参考プログラム」って、質問者の高校生が「試験が終わったら見てみる」ような(気楽な)レベルなの?
・これが理解できるって、最近の高校生のレベルって(昔の高校生のコトも知りませんが)こんなにスゴいの~? と、ア然。
私は、いまだ「Overrides」など使ったこともない。使うと、話が(プログラムが)更にややこしくなる気がして。
※Override=乗っ取り と、脳で日本語に変換できるのみ(笑)
また「doublebufferr」にもイヤな思い出が。
VB.NETに乗り換えた直後、画面の「バタつき」に困りはて、何か…とさがしたら… あった! のがコレ。
でも、どうプログラムしても「バタつき」が治らず、結局自前で考えたPictureBox2つを表裏切り替えるという方法で対処。
※結局、「doublebufferr」には、いまだ近寄ったことがない(笑)
私は、この高校生に「一つのコマンドが使えなくても(理解できなくても)、同じ処理ができる別の方法があるはずだから、投げないように」と言いたいですナ(笑)
…とヤケクソ気味に書いてはみたのですが、何度も魔界の仮面弁士さんのプログラムを見返してみて…
私の知らないテクニックを使うと、こんなに(恐ろしいぐらいの)短いプログラムで収まるのかと、ボー然としてるのも事実です。
「たし算」しか知らない者が、はじめて「かけ算」を目の当たりにしたような…。
※しかもタイムスタンプ(らしきモノ)からみると「2010.02」って、10年前から(普通のテクニックとして)あったの~?
どうやら「構造体の勉強」前に(高校生と一緒に)このプログラムの勉強から始めた方がよさそう(笑)
以上