Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

オブジェクトプロパティ構文の実装 #1793

Open
kujirahand opened this issue Nov 15, 2024 · 6 comments
Open

オブジェクトプロパティ構文の実装 #1793

kujirahand opened this issue Nov 15, 2024 · 6 comments

Comments

@kujirahand
Copy link
Owner

kujirahand commented Nov 15, 2024

下記のようなDOMオブジェクトのプロパティへの書き込みを、もっと分かりやすく記述できる構文を追加します。

キャンバスの「高さ」へ200をDOM属性設定。

プロパティ構文の仕様

「$」記号を使うと、DOMオブジェクトが指定されたと仮定するとか…

キャンバス$高さ=200
キャンバス$幅=32

すると、次のような擬似コードを実行するようにします。

// オブジェクトに__setPropや__getPropがあるとき
<キャンバス>.__setProp("高", 200)
// ないとき
<キャンバス>["高"] = 200

「高さ」とか「幅」とか、日本語のプロパティを__setProp/__getPropの中で取得する仕組みです。

プロパティ構文の利用例

B=「OK」のボタン作成
その$幅="300px"
その$背景色=緑色
その$余白="3em"

動作が拡張されました #1863

@weyk さんが以下の改良を追加してくれました!
#1863

  • 事前にクラス(コンストラクタ)に対してsetterとgetterを登録する。
  • 対象objにsetter/getterがある場合は従来と同じ動き。
  • 対象objにsetter/getterがundefinedの場合、登録したクラスのインスタンスならsetter/getterをobjに定義してそれに従う。登録したクラスにない場合はsetter/getterにnullを設定して再チェックを抑止する。
  • 対象objのsetter/getterがnulの場合、登録したクラスのチェックを省略してメソッドがない場合の動作をする。
  • 生成コードは共通部分をNakoSystemに追い出したうえで更に増える。
  • クラスのインスタンスチェックは登録した暮らすかどうかをループでチェックすることになるので登録数が増えると重くなる。
@snowdrops89
Copy link

キャンバスのDOM属性について:
・高さ=200
・幅=32  

v1のように書けてすごく良さそうですが、DOMに色々設定するのはスタイルもあるので属性だけができるようになっても意味がないです。
この書式を導入するならv1同様、背景色や文字色や透明度、可視や重なりなどもここで設定できるようにしたいところです。
何がどっちのアレか判別して設定するのは困難でしょうか。
全てのプロパティやスタイルではなく、v1のGUIのメンバ変数みたいなのに項目を絞れば可能そう?

キャンバス$高さ=200
キャンバス$幅=32

プロパティを直接設定するのに、キャンバス["width"]=200、などと書くことが出来ますが、当然ながら和属性は使えないので結局属性設定を使ったりするのですが、それが和属性を使って短く書けるエイリアスがあれば、ワタシ的にはちょっと便利かもですが~。

@kujirahand
Copy link
Owner Author

やはり、「オブジェクト$プロパティ=値」の書き方が良さそうですね。
まずは実験的に実装してみます♪

@kujirahand kujirahand changed the title オブジェクトにプロパティを設定する構文を用意する (実験的) オブジェクトにプロパティを設定する構文を用意する Nov 16, 2024
@kujirahand
Copy link
Owner Author

OBJ$「key」=valのような書式でエラーになります。

@kujirahand
Copy link
Owner Author

修正しました!
プロパティ「$」構文の使い勝手を教えてください。

@snowdrops89
Copy link

なんと、スタイルも属性も出来るんですね!しゅごい!
これなら、両方できる「DOM設定変更」?みたいな命令も出来そうな。

でもこれ、エディタ標準のキャンバスには効かないみたいですね。

描画中キャンバス$幅=100        //できない
描画中キャンバス$幅=「100px」  //できない

命令でキャンバス作成したキャンバスは一応できるのですが、キャンバスは、widthとheightが、属性とスタイルと両方あって、ふつうにキャンバスのサイズを変えたい時には属性を使うのですが、他の要素と同様になってしまうのでスタイルしか変えられません。

描画中キャンバス=[400,400]のキャンバス作成
描画中キャンバス$幅=100        //できない
描画中キャンバス$幅=「100px」  //スタイルはできる

スタイルの場合は他の要素同様単位が必要なのですが、属性の場合は単位無しなので、キャンバスだった場合はそこで仕分けしてどちらも出来るようにはできないでしょうか?

@kujirahand
Copy link
Owner Author

#1863
で動作が拡張されました

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants