問題タブ [syntactic-sugar]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
2918 参照

java - コード補完からすべての java.lang.Object メソッドを非表示にするにはどうすればよいですか?

既存のクラス ライブラリの単純なラッパー クラスをいくつか作成したいと考えています。構文を読みやすく、推測しやすいものにするために (コード補完を介して)、java.lang.Objectのメソッドを削除したいと思います。

問題は、Java のすべての非アトミックなものが Object から継承されるため、これらのメソッドを持つことです。列挙型とインターフェイスを介してラッパー構文を作成しようとしましたが、成功しませんでした。列挙型インターフェースjava.lang.Objectsであるためです。

java.lang.Object には、インターフェースのコード補完で見たくない 9 つのメソッドがあります。削除したいもの (赤) と保持したいもの (緑) は次のとおりです。

代替テキスト http://ju.venile.de/upload/java-lang-object-methods.png

以下は、既存のクラスの周りに適切なラッパーを作成するためのサンプル コードです (ビルダー パターン)。

新しいラッパー コードの使用法は次のようになります。

ビルダーのすべてのステートメントをインターフェイスにキャストthisすると、メソッドの可視性が低下します。たとえば、ビルダーが複数のインターフェイスを実装している場合です。残念ながら、すべての java.lang.Object メソッドは残ります。

このメソッドの非表示が Java で可能である場合 (おそらく注釈を使用しますか?)、IDE に依存しない素敵なライブラリを作成できます (どこでも素敵なコード補完)。そうでない場合は、少なくとも Eclipse IDE (おそらくプラグイン) には、java.lang.Object メソッドの非表示を提供できるトリックがあるかもしれません。

0 投票する
5 に答える
1925 参照

syntax - バインド (<-) と代入 (let) を 1 行に混在させる方法は? (ハスケルで)

これは Haskell のシンタックス シュガーに関するものです。簡単な Haskell プログラム:

最初の行 ( ) でバインドを使用し、2 行目 ( args <- getArgs) で純粋な代入を使用しlet first = ...ます。それらを読みやすいワンライナーにマージすることは可能ですか?

バインドを「脱糖」に書き換えることができることを理解しています。

しかし、 (>>=) と return で行を乱雑にすることなく、より良い方法はありますか?

0 投票する
9 に答える
1453 参照

c++ - 2D 行列と operator() のオーバーロード / 醜い構文

プロジェクトの 1 つで 2D マトリックスを使用しています。C++ FAQ Liteで提案されているようなものです。

きちんとしたことは、次のように使用できることです。

今、頂点で構成されたグラフがあり、各頂点には、上記のような 2D マトリックスへのパブリック (例を簡単にするため) ポインターがあります。今、私はそれにアクセスするためのかなり醜い構文を持っています。

おそらく、演算子のオーバーロードに慣れていないため、ここでいくつかの構文糖衣が欠けています。より良い解決策はありますか?

0 投票する
10 に答える
1941 参照

c# - C# - out パラメータのシンタックス シュガー?

C# では、最も純粋な意味で複数の戻り値が許可されているとしましょう。

に圧縮:

その場合、実際にメソッド呼び出しを行うまで、メソッドの戻り値を理解する必要はありません。おそらく、どのような戻り値を扱っているかを教えてくれる Intellisense に頼っているのかもしれませんし、なじみのないクラスから必要なものを返すメソッドを探しているのかもしれません。

同様に、現在、C# には次のようなものがあります。

ここで、GetParticipants の引数は出力文字列パラメーターです。ただし、これは上記とは少し異なります。これは、out パラメーターの結果を保持する変数を作成するコードを先取りするか、少なくとも戻って記述する必要があることを意味するためです。これは少し直感に反します。

私の質問は、開発者がメソッド呼び出しと同じ行でこの宣言を行うことを可能にする、現在の C# に構文糖衣があるかどうかです。次のようなことをすると、開発が(少し)より流動的になり、コードが読みやすくなると思います。

受信者がその場で宣言され、割り当てられたことを示すため。

0 投票する
7 に答える
291 参照

javascript - 別の関数の逆を返す関数を用意する価値はありますか?

最近、HasValue 関数を内部 JavaScript ライブラリに追加しました。

A 同僚との会話中に、基本的に単に逆になる別の関数も追加するというアイデアを思いつきました: おそらく HasNoValue や IsNothing を実行することになった場合:

ただし、両方のほうが読みやすいか、HasValue の方が読みやすいかはわかりません。どちらがより読みやすい/好ましいですか?

A:

B:

0 投票する
40 に答える
11502 参照

c# - これまでに見た拡張メソッドの最も優れた、または最も興味深い使用法は何ですか?

私は拡張メソッドが本当に好きになり始めています...彼女の誰かが、本当に頭を悩ませた、または単に賢いと思ったものに出くわしたのではないかと思っていました。

私が今日書いた例:

他のユーザーのコメントにより編集されました:

これにより、for ループを foreach ループとして記述できます。

他の例を見るのが待ちきれません!楽しみ!

0 投票する
3 に答える
31384 参照

scala - Scala の apply() メソッド マジックはどのように機能しますか?

Scala ではapply、クラスまたは最上位オブジェクトで呼び出されるメソッドを定義すると、そのクラスのインスタンスにペアの括弧を追加し、apply()それらの間に適切な引数を配置するたびに、そのメソッドが呼び出されます。例えば:

つまり、基本的にobject(args)は、 の構文糖衣ですobject.apply(args)

Scala はこの変換をどのように行うのでしょうか?

ここで、Predef オブジェクトの暗黙的な型変換と同様に (種類は異なりますが)、グローバルに定義された暗黙的な変換が行われていますか? それとももっと深い魔法ですか?Scala は、多くの例外を含む多くのルールよりも、より小さなルール セットを一貫して適用することを強く支持しているように思われるためです。これは、最初は例外のように思えます。

0 投票する
1 に答える
162 参照

c# - +=イベントへの割り当てに相当するコード

イベントにメソッドを追加するための+=演算子に相当する生のコードを誰かに教えてもらえないかと思っていました。技術的な観点から、どのように機能するのか興味があります。