タグ付けされた質問 「syntax」

構文は、言語で正しく構造化されたプログラムを作成する方法を定義する一連の規則を指します。プログラムの意味や解釈は明示的には扱いません。

20
「ブレーク」と「継続」は悪いプログラミング慣行ですか?
私の上司は、下手なプログラマーがループ内で使用しているbreakとさりげなく言及していcontinueます。 それらが理にかなっているので、私は常にそれらを使用します。インスピレーションをお見せしましょう: function verify(object) { if (object->value < 0) return false; if (object->value > object->max_value) return false; if (object->name == "") return false; ... } ここでのポイントは、最初に関数が条件が正しいことを確認してから、実際の機能を実行することです。IMOループにも同じことが適用されます。 while (primary_condition) { if (loop_count > 1000) break; if (time_exect > 3600) break; if (this->data == "undefined") continue; if (this->skip == true) continue; ... …

15
Java、Javascript、C#などのメモリ管理言語が「new」キーワードを保持しているのはなぜですか?
newJava、Javascript、C#などの言語のキーワードは、クラスの新しいインスタンスを作成します。 この構文は、C ++から継承されているようです。C++ newは、ヒープ上のクラスの新しいインスタンスを割り当て、新しいインスタンスへのポインターを返すために特に使用されます。C ++では、これがオブジェクトを構築する唯一の方法ではありません。new- を使用せずにスタック上にオブジェクトを作成することもできます。実際、この方法のオブジェクトの作成方法はC ++でより一般的です。 だから、C ++のバックグラウンドから来て、newJava、Javascript、C#のような言語のキーワードは、私にとって自然で明白なように思えました。それから、newキーワードのないPythonを学び始めました。Pythonでは、次のように、コンストラクターを呼び出すだけでインスタンスが構築されます。 f = Foo() 最初は、Pythonが持つ理由がないことに気付くまで、これは少しnew戸惑いました。すべてがオブジェクトであるため、さまざまなコンストラクタ構文を明確にする必要はありません。 しかし、それから私は考えました-Javaの本当のポイントは何newですか?なんで言うのObject o = new Object();?どうしてObject o = Object();?C ++ではnew、ヒープへの割り当てとスタックへの割り当てを区別する必要があるため、間違いなくが必要ですが、Javaではすべてのオブジェクトがヒープ上に構築されますnew。Javascriptについても同じ質問をすることができます。私があまり馴染みのないC#では、newオブジェクト型と値型を区別するという点で何らかの目的があると思いますが、よくわかりません。 とにかく、C ++の後に来た多くの言語は単にnewキーワードを「継承」しているように思えます-本当にそれを必要としません。それはほとんど痕跡のキーワードのようなものです。なんらかの理由でそれを必要としているようには見えませんが、まだあります。 質問:これについて正しいですか?あるいはnew、Java、Javascript、C#などのC ++にインスパイアされたメモリ管理言語である必要があり、Pythonではなくてはならない説得力のある理由がありますか?



3
プログラミング言語、特にCでは、中括弧ではなく中括弧を使用するのはなぜですか?
「Cスタイル言語」の定義は、実際には「中括弧({})を使用する」まで簡略化できます。なぜその特定の文字を使用するのですか(そして[]、少なくともUSキーボードではShiftキーを必要としないなど、より合理的な文字を使用しないのはなぜですか)。 これらの中括弧からプログラマの生産性に実際の利点はありますか、または新しい言語設計者が代替手段(つまり、Pythonの背後にいる人)を探す必要がありますか? ウィキペディアは、C が前述のブレースを使用しているが、その理由を説明していないと言っています。Cベースのプログラミング言語のリストに関するウィキペディアの記事の声明は、この構文要素がやや特別であることを示唆しています。 大まかに言って、Cファミリー言語は、Cに似たブロック構文を使用する言語です(ブロックの開始と終了のための中括弧を含む)...



5
なぜPython辞書内に関数を保存するのですか?
私はpython初心者であり、辞書と関数を含むテクニックを学びました。構文は簡単で、些細なことのように思えますが、私のPythonの感覚はチクチクしています。これは深くて非常にパイソン的な概念であり、その重要性を十分に把握していないということです。誰かがこのテクニックに名前を付けて、どのように/なぜそれが役立つかを説明できますか? テクニックは、Python辞書とそれに使用する予定の関数がある場合です。値が関数の名前である追加の要素を辞書に挿入します。関数を呼び出す準備ができたら、名前ではなく、dict要素を参照して間接的に呼び出しを発行します。 私が取り組んでいる例は、Learn Python the Hard Way、2nd Edのものです。(これは、Udemy.comからサインアップしたときに利用可能なバージョンです。残念ながら、ライブの無料HTMLバージョンは現在Ed 3であり、この例は含まれていません)。 言い換えると: # make a dictionary of US states and major cities cities = {'San Diego':'CA', 'New York':'NY', 'Detroit':'MI'} # define a function to use on such a dictionary def find_city (map, city): # does something, returns some value if city in …

10
「if」および「while」と一緒に使用する場合、言語が式の周りに括弧を必要とするのはなぜですか?
C、Java、およびC ++のような言語はすべてで使用した場合、式全体の周りに括弧を必要としif、whileまたはswitch。 if (true) { // Do something } とは対照的に if true { // Do something } 括弧が冗長であるため、これは私には奇妙に思えます。この例でtrueは、は単独の式です。括弧は、私が知っている方法でその意味を変えません。なぜこの奇妙な構文が存在し、なぜそんなに一般的ですか?気付いていないのに利点はありますか?

6
SQLクエリでFromの前にSelectがあるのはなぜですか?[閉まっている]
これは学校で私を悩ませたものです。 5年前、私がSQLを学んだとき、最初に必要なフィールドを指定し、次にそれらのフィールドを指定する理由を常に考えていました。 私の考えによると、次のように書く必要があります。 From Employee e Select e.Name それで、なぜ規範は次のように言うのですか? Select e.Name -- Eeeeek, what does e mean? From Employee e -- Ok, now I know what e is SQLを理解するのに何週間もかかりましたが、その時間の多くは間違った要素の順序によって消費されていたことを知っています。 C#で書くようなものです。 string name = employee.Name; var employee = this.GetEmployee(); したがって、これには歴史的な理由があると思います。どうして?
67 sql  history  syntax 

10
構文設計-引数が渡されないときに括弧を使用する理由
多くの言語では、構文function_name(arg1, arg2, ...)を使用して関数を呼び出します。引数なしで関数を呼び出す場合は、実行する必要がありますfunction_name()。 コンパイラーまたはスクリプトインタープリターが()関数呼び出しとして正常に検出する必要があることは奇妙に感じます。変数が呼び出し可能とわかっている場合、なぜfunction_name;十分ではないのでしょうか? 一方、一部の言語では次のことを実行できます。関数またはコマンドを呼び出すことfunction_name 'test';もできますfunction_name 'first' 'second';。 括弧は、優先順位を宣言するためだけに必要であり、他の場所ではオプションである場合、括弧はより良いと思います。たとえば、行うことif expression == true function_name;はとして有効である必要がありますif (expression == true) function_name();。 私の意見で最も厄介なことは'SOME_STRING'.toLowerCase()、プロトタイプ関数が引数を必要としないことが明らかになったときに行うことです。なぜデザイナーはよりシンプルなものに反対したの'SOME_STRING'.lowerですか? 免責事項:誤解しないでください、Cのような構文が大好きです!;)私はそれがもっと良いかどうか尋ねているだけです。要求に()はパフォーマンス上の利点がありますか、それともコードを理解しやすくしますか?正確な理由は何なのか本当に興味があります。

5
インターフェイスを明示的または暗黙的に実装することの違いは何ですか?
Visual Studioでは、インターフェイスを右クリックして、[インターフェイスの実装]または[インターフェイスの明示的な実装]を選択できます。 public class Test : ITest { public string Id // Generated by Implement Interface { get { throw new NotImplementedException(); } } string ITest.Id // Generated by Implement Interface Explicitly { get { throw new NotImplementedException(); } } } この2つの間に見られる唯一の違いは、インターフェイスを明示的に実装することを選択した場合、作成時にインターフェイスのプロパティとメソッドにインターフェイス名が追加されることです。 そのメソッド/プロパティがどこから来たのかを見ることができるので、コードが少し読みやすくなりますが、これはクラスの使用方法やコンパイル方法に違いをもたらしますか?暗黙的または明示的にインターフェイスを実装する場合、それは本当に重要ですか?
64 c#  syntax 

2
なぜビット演算子は比較よりも優先度が低いのですか?
理由を説明してもらえますか、なぜ最も一般的な言語の束(下記の注を参照)で比較演算子(==、!=、<、>、<=、> =)がビットごとの演算子(&、|、^ 、〜)? この優先順位が自然な使用法に出会ったことはないと思います。それは常に次のようなものです: if( (x & MASK) == CORRECT ) ... // Chosen bits are in correct setting, rest unimportant if( (x ^ x_prev) == SET ) // only, and exactly SET bit changed if( (x & REQUIRED) < REQUIRED ) // Not all conditions satisfied 私が使用する場合: flags = …

4
なぜ最近のプログラミング言語で変数名の後に型が続くのですか?
ほぼすべての最新のプログラミング言語(Go、Rust、Kotlin、Swift、Scala、Nim、Pythonの最終バージョンでも)で、型が常に変数宣言の変数名の後に来るのはなぜですか? なぜx: int = 42ありませんかint x = 42? 後者は前者よりも読みにくいですか? それは単なるトレンドですか、このソリューションの背後には本当に意味のある理由がありますか?

3
Java 8でラムダ構文の代わりにメソッド参照構文を使用すると、パフォーマンス上の利点はありますか?
メソッド参照はラムダラッパーのオーバーヘッドをスキップしますか?将来的にはそうなるのでしょうか? メソッド参照に関するJavaチュートリアルによると: 時々...ラムダ式は既存のメソッドを呼び出すだけです。これらの場合、既存のメソッドを名前で参照する方が明確な場合がよくあります。メソッド参照により、これを行うことができます。これらは、既に名前を持っているメソッドのコンパクトで読みやすいラムダ式です。 いくつかの理由から、メソッド参照構文よりもラムダ構文の方が好きです。 ラムダはより明確です Oracleの主張にもかかわらず、メソッド参照構文があいまいであるため、ラムダ構文はオブジェクトメソッド参照の速記より読みやすいと思います。 Bar::foo xのクラスで静的な1引数のメソッドを呼び出してxを渡しますか? x -> Bar.foo(x) または、xで引数のないインスタンスメソッドを呼び出していますか? x -> x.foo() メソッド参照構文は、どちらの代わりにもなります。コードが実際に行っていることを隠します。 ラムダはより安全です クラスメソッドとしてBar :: fooを参照し、Barが後で同じ名前のインスタンスメソッドを追加した場合(またはその逆)、コードはコンパイルされなくなります。 ラムダを一貫して使用できます 任意の関数をラムダでラップできます。そのため、どこでも同じ構文を一貫して使用できます。メソッド参照構文は、プリミティブ配列を取得または返すメソッド、チェックされた例外をスローするメソッド、またはインスタンスと静的メソッドとして使用されるメソッド名が同じメソッドでは機能しません(メソッド参照構文が呼び出されるメソッドについて曖昧だからです) 。同じ数の引数を持つメソッドをオーバーロードした場合は機能しませんが、とにかくそれを行うべきではないため(Josh Blochの項目41を参照)、メソッド参照に対してそれを保持することはできません。 結論 パフォーマンスの低下がない場合は、IDEで警告をオフにし、メソッド参照をコードに散在させることなくラムダ構文を一貫して使用したいと思います。 PS ここでもそこでもありませんが、私の夢では、オブジェクトメソッドの参照は次のように見え、ラムダラッパーなしでメソッドに対してinvoke-dynamicを直接適用します。 _.foo()

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.