問題タブ [language-features]
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.
loops - Mathematica の ForEach ループ
私はこのようなものが欲しいです:
または、より一般的には、ループしているリスト内の任意のものを分解するには、次のようにします。
通常、Map
または他の純粋に機能的な構造を使用し、副作用を使用する非機能的なプログラミング スタイルを避けます。しかし、これは for-each コンストラクトが非常に役立つと私が考える例です。
次のように、シンボルと式をペアにするオプション (ルール) のリストがあるとします。
ここで、これらのシンボルをそれらの数値に明確にマッピングするハッシュ テーブルを作成したいと考えています。それよりもクリーンな方法はないと思います
追加のテスト ケース
この例では、変数のリストを変換します。
上記の後、 に{a,b,c}
評価されるはず{f[1],f[2],f[3]}
です。これは、リストの場合、 の 2 番目の引数が評価されないままにしてeach
おく必要があることを意味することに注意してください。
未評価のフォームがリストでない場合、2 番目の引数を評価する必要があります。例えば:
b
との値が表示されc
ます。
補遺: for-each を適切に行うには、 and をサポートする必要がBreak[]
ありContinue[]
ます。それを実装する方法がわかりません。おそらく、For、While、または Do に関して何らかの方法で実装する必要があります。これは、 Break[]
andをサポートする唯一のループ構造であるためContinue[]
です。
そして、これまでの回答のもう 1 つの問題: 彼らは s を食べReturn[]
ます。つまり、関数で ForEach ループを使用していて、ループ内から関数から戻りたい場合はできません。ForEach ループ内で Return を発行すると、 のように機能するようContinue[]
です。これはちょうど(それを待って)私をループに投げ込みました。
syntax - あなたの言語の「ハングアップ」は何ですか?
最近の言語対言語に関する質問を興味深く読みました... Perl 対 Python、Python 対 Java、ある言語が別の言語よりも優れている可能性はありますか?
私が気づいたことの 1 つは、私たちの多くが言語を嫌う非常に表面的な理由を持っているということです。私たちはこれらのことに一目で気づき、私たちをオフにします。私たちはおそらく完全に優れた言語を避けています。気にすれば 2 秒で好きになったり無視したりすることをおそらく学べる機能の結果です。
まあ、私は次の男と同じくらい罪悪感があります. ここに行きます:
- Ruby: 私が目にするすべての Ruby のサンプル コードは、この
puts
コマンドを使用しています。これは一種の幼稚なイディッシュ語の解剖学的用語です。そのため、Ruby コードを真剣に受け止めるべきなのに、真剣に取り組むことができません。 - Python: 初めて見たとき、意味のある空白の部分ににやにや笑ってしまいました。それから数年は避けました。今はそれ以外はほとんど使っていません。
- Java: identifiersThatLookLikeThis は好きではありません。正確な理由はわかりません。
- Lisp: すべての括弧に問題があります。重要性と目的が異なるもの (関数の宣言、変数の代入など) は構文的に区別されておらず、何が何であるかを学ぶのが面倒です。
- Fortran: すべて大文字だと目が痛いです。最新のコードをそのように書く必要がないことは知っていますが、ほとんどのサンプル コードは...
- Visual Basic:
Dim
変数の宣言に使用されるのが気になります。GW-BASIC が配列の次元にのみ使用されていた古き良き時代を覚えているからです。
一見したところ、どの言語が適切に見えましたか? Perl、C、QBasic、JavaScript、アセンブリ言語、BASH シェル、FORTH。
さて、汚れた洗濯物を放映したので...あなたの洗濯物を聞きたい. あなたの言語のハングアップは何ですか? 気になる表面的な特徴は何ですか?それらをどのように乗り越えましたか?
c# - コンストラクターの署名と静的メソッドをどのように強制しますか?
(子) クラスに、C# または Java で特定のシグネチャまたは特定の静的メソッドを持つコンストラクターを強制する方法はありますか?
明らかに、これにインターフェイスを使用することはできません。使用が制限されることはわかっています。私が役に立つと思う例の 1 つは、次のようなデザイン ガイドラインを適用する場合です。
例外
すべてに 4 つの標準コンストラクターが必要ですが、それを強制する方法はありません。これらをキャッチするには、FxCop (C# の場合) などのツールに頼る必要があります。
演算子
2 つのクラスを合計できることを指定する規約はありません (C# の operator+ を使用)。
この制限を回避する設計パターンはありますか? C# または Java の将来のバージョンでこの制限を克服するために、言語に追加できる構成要素は何ですか?
python - Python 2.6がリリースされたので、すべてのプログラマーが現在その言語で知っているべきモジュールは何ですか?
Pythonの便利な機能の多くは、モジュール内にいくらか「隠されています」。たとえば、名前付きタプル(Python 2.6の新機能)は、コレクションモジュールにあります。
ライブラリのドキュメントページには、この言語のすべてのモジュールが表示されますが、Pythonを初めて使用する場合は、「ああ、 Pythonを使用してこの方法で実行できるとは知りませんでした」と言うでしょう。言語の重要な機能が経験豊富な開発者によって指摘されていない限り。
Python 2.6の新しいモジュールを特に探しているわけではありませんが、この最新リリースにあるモジュールを探しています。
syntax - ポストオペレーターの組み合わせ?
プレインクリメント演算子とポストインクリメント演算子はよく知られています。
そして、この原則を拡張する「複合演算子」:
私はしばしば「結合後の演算子」が必要でした。これにより、次のことが可能になります。
明らかに、これは交換不可能な演算子でのみ実際に有用であり、構文が借用されていても、意味は前/後インクリメントから変更されます。
そのような演算子を提供する言語を知っていますか?なぜそれがより一般的ではないのですか?
c# - C#でtimes()Rubyメソッドを模倣する機会はありますか?
C#を使用してアルゴリズム内でN回何かを行う必要があるたびに、このコードを記述します
Rubyを勉強して、このような同じセマンティクスで使用できるメソッドtimes()について学びました。
C#のコードフラグメントはより複雑に見えるため、役に立たない変数iを宣言する必要があります。
IEnumerableを返す拡張メソッドを作成しようとしましたが、サイクル変数iを宣言する必要があるため、結果に満足できません。
いくつかの新しいC#3.0言語機能を使用して、N回のサイクルをよりエレガントにすることは可能ですか?
javascript - 最高の JavaScript シンタックス シュガー
ここにいくつかの宝石があります:
リテラル:
デフォルト:
もちろん、匿名関数は知っていますが、それらをリテラルとして扱い、その場で (クロージャーとして) 実行できることは素晴らしいことです。
質問: javascript で使用できる他の優れた構文糖衣は何ですか?
f# - F# の隠れた機能
これは、同様のC#の質問に対する恥知らずな試みです。
では、お気に入りの F# の非表示 (または非表示) 機能は何ですか?
これまで使ってきた機能のほとんどは完全に隠されているわけではありませんが、かなり新鮮です。たとえば、C# や VB.NET と比較して、演算子をオーバーロードするのは簡単です。
そしてAsync<T>
、本当に醜いコードを削るのに役立ちました。
私はまだ言語に慣れていないので、他の機能が実際に使用されていることを学ぶことは素晴らしいことです.
.net - .NET のクラス ローダーに相当するもの
.NET で「Java カスタム クラス ローダー」に相当するものを定義できるかどうかは誰にもわかりませんか?
少し背景を説明するには:
「Liberty」と呼ばれる、CLR を対象とする新しいプログラミング言語を開発中です。この言語の機能の 1 つは、「型コンストラクター」を定義する機能です。これは、コンパイル時にコンパイラーによって実行され、出力として型を生成するメソッドです。それらはジェネリックの一種の一般化であり (言語には通常のジェネリックが含まれています)、次のようなコードを ("Liberty" 構文で) 記述できます。
「タプル」は次のように定義されています。
この特定の例では、型コンストラクターtuple
は、VB および C# の匿名型に似たものを提供します。
ただし、匿名型とは異なり、「タプル」には名前があり、パブリック メソッド シグネチャ内で使用できます。
これは、最終的にコンパイラによって出力される型を複数のアセンブリ間で共有できるようにする方法が必要であることを意味します。たとえば、私はしたいです
tuple<x as int>
tuple<x as int>
アセンブリ A で定義され、最終的にアセンブリ B で定義されたものと同じ型になります。
もちろん、これの問題は、アセンブリ A とアセンブリ B が異なる時間にコンパイルされることです。つまり、どちらも、タプル型の互換性のない独自のバージョンを発行することになります。
これを行うためにある種の「型消去」を使用することを検討したため、次のような型の束を持つ共有ライブラリが作成されます (これは「Liberty」構文です)。
次に、i、j、および k タプル フィールドからのアクセスを 、 、および にリダイレクトField1
しField2
ますField3
。
ただし、それは実際には実行可能なオプションではありません。これは、コンパイル時tuple<x as int>
にtuple<y as int>
は と が異なる型になることを意味しますが、実行時には同じ型として扱われます。これは、等価性や型の同一性などに多くの問題を引き起こします。それは私の好みにはあまりにも抽象的すぎます。
他の可能なオプションは、「ステート バッグ オブジェクト」を使用することです。ただし、状態バッグを使用すると、言語で「型コンストラクター」をサポートするという目的全体が無効になります。「カスタム言語拡張機能」を有効にして、コンパイラが静的な型チェックを実行できるコンパイル時に新しい型を生成できるようにするという考え方があります。
Java では、カスタム クラス ローダーを使用してこれを行うことができます。基本的に、タプル型を使用するコードは、実際にディスク上で型を定義しなくても発行できます。次に、実行時にタプル型を動的に生成するカスタム「クラス ローダー」を定義できます。これにより、コンパイラ内で静的な型チェックが可能になり、コンパイルの境界を越えてタプル型が統一されます。
ただし、残念ながら、CLR はカスタム クラスの読み込みをサポートしていません。CLR でのすべての読み込みは、アセンブリ レベルで行われます。「構築された型」ごとに個別のアセンブリを定義することは可能ですが、それはすぐにパフォーマンスの問題につながります (型が 1 つしかないアセンブリが多数あると、リソースが多すぎます)。
だから、私が知りたいのは:
.NET で Java クラス ローダーのようなものをシミュレートして、存在しない型への参照を発行し、それを使用する必要があるコードを実行する前に、実行時にその型への参照を動的に生成することはできますか?
ノート:
*実際には、質問への回答は既に知っています。以下に回答として提供します。ただし、解決策を見つけるために、約 3 日間の調査と、かなりの IL ハッキングが必要でした。他の誰かが同じ問題に遭遇した場合に備えて、ここに文書化することをお勧めします. *
c# - C#/CLI 識別子の最大長は?
名前には他にどのような制限がありますか (スコープ内での明らかな一意性以外に)?
それらはどこで定義されていますか?