短くジェネレータを書くには
- カテゴリ:
- JavaScript
- コメント数:
- Comments: 0
◆ メソッド記法で書いてプロパティ取り出しだとちょっと短い
◆ let/const つけて代入すると function* のほうが短くなるくらい
◆ let/const つけて代入すると function* のほうが短くなるくらい
ジェネレータの書き方は * を function につけるというものです
今の所 「function」 キーワードが必要な記法しかなく アロー関数で
とかはありません
stage1 ですが一応プロポーサルはあります
普通に書くと文字数は
14 文字です
ジェネレータを作る方法自体が限られていてメソッド記法か関数から作るかくらいです
これでもジェネレータが作れます
これを利用して
12 文字です
let/const などがないのでグローバル変数になります
つけるなら function キーワードの定義よりも長くなります
わざわざこんな方法を取ってまで短くする場合ってグローバルとか気にせず文字数を減らすことのみが目的だと思うので気にしなくていいでしょう
こうすることでもジェネレータは作れます
ジェネレータの処理の記述は Function コンストラクタと同じ感じです
難点は文字列にしないといけないところです
文字列でコードを書くと不便なところは多いですからね
JavaScript で書けるようにするとなるとアロー関数で書いて文字列化という方法があります
こういう関数を準備しておいて
こう使います
実行してみると
という感じです
文字列から正規表現で取り出すのでパフォーマンスはよくはありません
さらに アロー関数を定義するところではジェネレータでないので yield が入ると構文エラーになります
yield が使えないとあまりジェネレータとしての価値がないので やっぱり文字列 またはコメントからヒアドキュメント風に取り出しとなります
書きづらい上に事前準備も必要となると短く書けても意味がない事が多いのでこの方法は使い所はなさそうです
function* ge(){
yield 1
yield 2
return 3
}
今の所 「function」 キーワードが必要な記法しかなく アロー関数で
() =>* {}
() *=> {}
とかはありません
stage1 ですが一応プロポーサルはあります
短く書く
毎回 function って書くのはめんどうですし もっと短く書けないかなと考えてみました普通に書くと文字数は
function*f(){}
14 文字です
ジェネレータを作る方法自体が限られていてメソッド記法か関数から作るかくらいです
メソッド記法
const obj = {
*gen(){}
}
これでもジェネレータが作れます
これを利用して
f={*f(){}}.f
12 文字です
let/const などがないのでグローバル変数になります
つけるなら function キーワードの定義よりも長くなります
わざわざこんな方法を取ってまで短くする場合ってグローバルとか気にせず文字数を減らすことのみが目的だと思うので気にしなくていいでしょう
関数から
const G = function*(){}.constructor
const gen = G("")
こうすることでもジェネレータは作れます
ジェネレータの処理の記述は Function コンストラクタと同じ感じです
G("a, b, c", "yield1\nyield 2")
(function* anonymous(a, b, c
) {
yield1
yield 2
})
難点は文字列にしないといけないところです
文字列でコードを書くと不便なところは多いですからね
JavaScript で書けるようにするとなるとアロー関数で書いて文字列化という方法があります
function G(af){
const m = af.toString().match(/^\((.*?)\) *=> *\{(.*)\}$/)
const GF = function*(){}.constructor
if(m){
return GF(m[1], m[2])
}
}
こういう関数を準備しておいて
G((a, b)=>{return a + b})
ƒ* anonymous(a, b
) {
return a + b
}
こう使います
実行してみると
G((a, b)=>{return a + b})(10, 20).next()
// {value: 30, done: true}
という感じです
文字列から正規表現で取り出すのでパフォーマンスはよくはありません
さらに アロー関数を定義するところではジェネレータでないので yield が入ると構文エラーになります
yield が使えないとあまりジェネレータとしての価値がないので やっぱり文字列 またはコメントからヒアドキュメント風に取り出しとなります
書きづらい上に事前準備も必要となると短く書けても意味がない事が多いのでこの方法は使い所はなさそうです