JavaScript

"JavaScript" でひとこと

36 fans

書き込むには、ログインまたはユーザー登録を行ってください。 初めての方へ

a-kuma3

JavaScript

返信先のろまんば

大域ジャンプは、たまに欲しくなります。
二重以上のループからの脱出とか、これは関数にすべきだけと、それを呼び出すループの外側に脱出したいとか。
# 後者は、練り不足感は半端ないです

数値計算系だと、二次元、三次元配列を Array のネストで表現するしかない言語が普通ですけれど、some とか find では素直に書けないのですよね(JavaScript で遭遇したことはないかな
a-kuma3

JavaScript

返信先のろまんば

何の根拠もなくテキトーに書きますけど、メソッドチェーンって、一連の処理が終わるまで外部には見えてないけどそれぞれが状態を抱えているので最適化しにくいんじゃないかと思うんですよね。
JIT の最適化とか随分と前から言われているけれど、c/c++ の最適化に比べると体感で随分と低いイメージがあって。

メソッドチェーンに最初に触れたのは Ruby かなあ。
ループを隠蔽するという考え方には、なるほどなあ、と思いました。

メソッドチェーンが長くなったときのインデントとか、どうしようかとかときどき悩みますが、Decorator パターン好きなのであまり気になりません。

obj
 .each ...
 .find ...
 .map ...

sh 系だと、デリミタは行末か

cmd |\
 sed ... |\
 grep ... |\
 awk ... |\ (続きを読む)
noromanba

JavaScript

返信先a-kuma3
すいません、CPSは夜中の酔っぱらい運転なのでまた今度で…。間違ってる気がするし関数型あやふやで申し訳ない。TL;DR化しそうなのですごく雑に言うと、js/DOMのAPI、ES5位までのコールバックとメソッドチェーン主体でスコープ小さく書いてくスタイルが好きなんだけど、「ES5+, 6/2015 あたりから外部イテレータのAPIが増えてるような。逆方向に行った理由あんだろうな」っていう単純なとこです。使う方がnextするってのをどう捉えるかですね。yeildの変換が象徴的かも。外部の方がリソース喰わなそうだなとは思います
noromanba

JavaScript

返信先のろまんば
結局何が言いたいかっていうと、大域脱出する時にラベル使ってもマイナーすぎるので、知ってようが使うのためらうってことです。どっちが良いかは場合によるでしょう
a-kuma3

JavaScript

返信先のろまんば

帯域脱出に例外でもないものを throw したことを懺悔しに来ました (´・ω・`)
# setjmp/longjump ノスタルジー
noromanba

JavaScript

大域脱出用にラベル使ってもいい気がするけど、巡り会ったことが無い
noromanba

JavaScript

返信先のろまんば
一方で for-of 使い始めたちょい前、 「あれ、return じゃねぇよな、どう止めるんだっけ」ってど忘れしてたので笑ってる場合ではない
# for 書かな過ぎ野郎
noromanba

JavaScript

GitHub - tc39/proposal-trailing-function-commas
実引数の足し引きで便利ですってやつ。一見そうね統一感あるし、って思うかもしれないけど、設計おかしい線が濃いんじゃ?入りそうで意味分からない
func(
arg1,
arg2,
arg3,
//...
);
noromanba

JavaScript

返信先のろまんば
全部backtick : カッコイイっぽいけどいつ ${} が出るか注意いるので疲れる
noromanba

JavaScript

single quote = [なんかjsっぽい, 属性セレクタがHTMLっぽい, JSONカッコ悪い, Consoleの出力直しいる]
double quote = [多言語と共通っぽい, 属性セレクタは'か\", JSONバッチコイ, Consoleまんまでよい]
スクラッチの時大体 single だけど double の方が良いと思います
a-kuma3

JavaScript

返信先のろまんば

>外部イテレータはあんまり気に入ってないけど、偉い人たちは好きみたい
それぞれの素性によるのかも。

JDBC 辺りから入った人は、「カーソル」を隠蔽したのが ResultSet のイテレータで、それを一般的なコンテナクラスに拡張したという理解がしやすいのが内部イテレータ。

c++ 界隈の人は、ポインタの汎用化が外部イテレータ。
「次」という状態はコンテナじゃなくて、コンテナを利用する側の状態だろうと。

ResultSet のような寿命が短いコンテナだとあまり気になりませんが、Array.find のようなのを内部イテレータで実装すると、寿命が長いコンテナで使った場合に、見つけた後にも「次」の状態を残してしまう。
外部イテレータだと、イテレータの寿命が短ければ良いだけなので、その辺りの気持ち悪さがない。

c++ の STL の iterator の実装はどうだったかなあ。
コンテナとイテレータの実装が直交してたような(記憶違いかも


CPS は難しいっす。
あれが分からないと関数型には嵌まらないんだろうなあと、挫折組 (´・ω・`) (続きを読む)
noromanba

JavaScript

返信先のろまんば
外部イテレータはあんまり気に入ってないけど、偉い人たちは好きみたい。CPS(Continuation-Passing Style)で繋げてくのが好きなんだけど、大規模開発だと外部の方がいいとかそういう感じなのかな
noromanba

JavaScript

fetch、現状 AbortController で timeout するしか無いけど汚くなって色々つらい
# Cancelable Promises の方がよかったんじゃないの?「NG Google」
austinburk
a-kuma3

JavaScript

返信先a-kuma3

V3 → V4 で、renderer: "dom" がなくなってて、canvas か webgl の二種類。
DOM ベースじゃなくなったことで、Marker が直接 canvas に描き込まれるので tooltip の実装が微妙に面倒。
#楽な方法があるのかもしれない

Marker へのイベントも、要素が canvas なので ol.Map のイベントを拾って、その位置の Marker (ol.Feature) を取得して処理するという感じの、ちょっと遠回りな感じ(慣れかな)。

吹き出しも専用のクラスがないっぽいので、自前で DOM を用意しなきゃならない。
DOM を作るのはたいしたことが無いんだけど、CSS を用意するのが面倒。
まあ、一度 作ってしまえば、使いまわせるのではあるけれど。
a-kuma3

JavaScript

OpenLayers いじってる。
Google Maps API のキーなしリクエストが廃止になったこともあって、需要あるかもって思い出した。

前に人力検索で回答したことがあって、検索で引っかかった情報は V2 が多くて、実はそのときの最新は V3 ってことに気づいてなかった。
# 妙な書き方のサンプルがあるなあ、程度

難しいなあ、これ。
クラスがいっぱいあって、その入れ子になっているんだけど、型を間違ったときに直感的なエラーにならない。
"xxx is not function" が、圧縮されて意味不明のメソッドで送出されてくる。
マーカーが表示できないなあ、ああでもない、こうでもないといじってたら、バージョンの非互換というか地雷を踏んでいた。
ol.layor.Vector の style に function を指定する場合、普通のバージョンは配列だけじゃなくて、単体の ol.style.Style を返しても OK だけど、最初に使ってた V3.7.0 は ol.style.Style の配列を返さないと正しく表示されないという。
# V3.0.0 でも単体のインスタンスで OK なので、狭い範囲の話だと思う

エラーも出ないし、マーカーも含めて canvas に描画されるから、位置が間違っているのかどうかもパッと分かりにくい。
# V2 は DOM だったので、位置が間違ってるかどうかの判別は簡単だった

先は遠い。

(続きを読む)
noromanba

JavaScript

自分で自分のこと知らないとオブジェクト指向っぽく無い、あれはなんて言うんだっけ?って思ってたところ Reflect 見て、あー、リフレクションとイントロスペクションかぁ と思い出す始末。メタ力が低下してる
noromanba

JavaScript

返信先a-kuma3
確かにベクトルとか行列っぽいやつやる時使った気がします。jsでやんないからなぁ。ゲーム・ギョームは普通にあるでしょうねー。
# やんないっていうか、やりたくないっていうか…
noromanba
noromanba

JavaScript

返信先a-kuma3
ES5の頃 wtfjs 系で知ったので、label 無いっていう認識が普通ですよね。最初びっくりしました
# 私のC戦闘力は K&R です
▼はてなハイクの今月のスポンサー

規約違反を通報

非表示設定

表示内容を選択