16

最近の言語対言語に関する質問を興味深く読みました... Perl 対 PythonPython 対 Javaある言語が別の言語よりも優れている可能性はありますか?

私が気づいたことの 1 つは、私たちの多くが言語を嫌う非常に表面的な理由を持っているということです。私たちはこれらのことに一目で気づき、私たちをオフにします。私たちはおそらく完全に優れた言語を避けています。気にすれば 2 秒で好きになったり無視したりすることをおそらく学べる機能の結果です。

まあ、私は次の男と同じくらい罪悪感があります. ここに行きます:

  • Ruby: 私が目にするすべての Ruby のサンプル コードは、このputsコマンドを使用しています。これは一種の幼稚なイディッシュ語の解剖学的用語です。そのため、Ruby コードを真剣に受け止めるべきなのに、真剣に取り組むことができません。
  • Python: 初めて見たとき、意味のある空白の部分ににやにや笑ってしまいました。それから数年は避けました。今はそれ以外はほとんど使っていません。
  • Java: identifiersThatLookLikeThis は好きではありません。正確な理由はわかりません。
  • Lisp: すべての括弧に問題があります。重要性と目的が異なるもの (関数の宣言、変数の代入など) は構文的に区別されておらず、何が何であるかを学ぶのが面倒です。
  • Fortran: すべて大文字だと目が痛いです。最新のコードをそのように書く必要がないことは知っていますが、ほとんどのサンプル コードは...
  • Visual Basic:Dim変数の宣言に使用されるのが気になります。GW-BASIC が配列の次元にのみ使用されていた古き良き時代を覚えているからです。

一見したところ、どの言語が適切に見えましたか? Perl、C、QBasic、JavaScript、アセンブリ言語、BASH シェル、FORTH。

さて、汚れた洗濯物を放映したので...あなたの洗濯物を聞きたい. あなたの言語のハングアップは何ですか? 気になる表面的な特徴は何ですか?それらをどのように乗り越えましたか?

4

37 に答える 37

32

私はVBのHate HATE「End Function」と「End IF」と「If ... Then」の部分が嫌いです。代わりに中括弧が表示されます。

于 2008-10-02T05:56:34.130 に答える
22

PHP の関数名の不一致。

// common parameters back-to-front
in_array(needle, haystack);
strpos(haystack, needle);

// _ to separate words, or not?
filesize();
file_exists;

// super globals prefix?
$GLOBALS;
$_POST;
于 2008-10-02T07:20:39.777 に答える
19

一部のスクリプト シェルでキーワードの綴りが逆になっているのはあまり好きではありませんでした

if- then- fiは十分に悪いですが、case-in- esacはばかげています。

于 2008-10-02T07:57:22.870 に答える
12

私は別のことを考えました...名前空間を定義するためにXMLで使用されるほとんど意味のないURLが嫌いです。xmlns="http://purl.org/rss/1.0/"

于 2008-10-02T16:56:39.643 に答える
9

パスカルBeginEnd. 冗長すぎる、ブラケット マッチングの対象にならない、さらに悪いことに、Beginfor everyがありませんEnd

Type foo = Record
    // ...
end;
于 2008-10-02T06:23:56.310 に答える
9

私は主に PHP 開発者ですが、インラインで十分な処理ができない言語は嫌いです。例えば:

$x = returnsArray();
$x[1];

それ以外の

returnsArray()[1];

また

function sort($a, $b) {
    return $a < $b;
}
usort($array, 'sort');

それ以外の

usort($array, function($a, $b) { return $a < $b; });
于 2008-10-02T06:27:12.010 に答える
8

私はオブジェクト指向スタイルが好きです。したがって、Pythonでは、文字列の長さを取得するためにlen(str)を表示したり、別の言語でsplit(str、 "|")のように文字列を分割したりするのはバグです。Cではそれで問題ありません。オブジェクトはありません。ただし、Python、Dなどにはオブジェクトがあり、他の場所でobj.method()を使用します。(私はまだPythonが素晴らしい言語だと思います。)

矛盾は私にとってもう1つの大きな問題です。同じライブラリで一貫性のない名前を付けるのは好きではありません:length()、size()、getLength()、getlength()、toUTFindex()(toUtfIndexではないのはなぜですか?)、Constant、CONSTANTなど。

.NETの長い名前は時々私を悩ませます。どういうわけかDataGridViewCellContextMenuStripNeededEventArgsを短縮できませんか?ListViewVirtualItemsSelectionRangeChangedEventArgsはどうですか?

そして、私は深いディレクトリツリーが嫌いです。ライブラリ/プロジェクトに5レベルの深さのディレクトリツリーがある場合、問題が発生します。

于 2009-02-22T21:37:56.083 に答える
7

CおよびC++の構文は少し風変わりです。彼らはさまざまなことに演算子を再利用します。あなたはおそらくそれに慣れているので、それについては考えていません(私もそうは思いません)が、括弧が持つ意味の数を考慮してください:

int main()        // function declaration / definition
printf("hello")   // function call
(int)x            // type cast
2*(7+8)           // override precedence
int (*)(int)      // function pointer
int x(3)          // initializer
if (condition)    // special part of syntax of if, while, for, switch

そして、C++で見た場合

foo<bar>(baz(),baaz)

fooとの定義がないと意味がわかりませんbar

  • <および>は、テンプレートのインスタンス化である場合もあれば、より小さいおよびより大きい場合もあります(通常ではありませんが合法です)。
  • ()は関数呼び出しである場合もあれば、コンマ演算子を囲んでいる場合もあります(つまり、サイズ効果に対してbaz()を実行してから、baazを返します)。

ばかげたことは、他の言語がこれらの特徴のいくつかをコピーしているということです!

于 2008-10-02T06:59:00.000 に答える
6

php ほど嫌いなものはこの世にありません。

  1. $ を含む変数。これは、変数ごとに 1 つの余分な奇妙な文字です。
  2. メンバーは -> でアクセスされますが、明確な理由はありません。メンバー アクセスごとに 1 文字追加されます。
  3. 本当に言語のフリークショー。
  4. 名前空間はありません。
  5. 文字列は .. で連結されます。
  6. 言語のフリークショー。
于 2008-10-02T07:38:23.387 に答える
6

Java とそのチェック例外。Java をしばらく離れ、.NET の世界に住んでいましたが、最近戻ってきました。

ときどき、私のthrows節がメソッドの内容よりもボリュームがあるように感じます。

于 2008-10-02T05:25:56.200 に答える
5

Objective Cのすべての[]と@は、基になるCのネイティブ構文とは非常に異なるため、初めて見たときは、すべてのオブジェクト指向が後付けとして不器用に固定されているという印象を与えました。

于 2009-02-28T05:31:19.757 に答える
5

は Java の定型的な冗長性を嫌います。

  • プロパティのゲッターとセッターを書く
  • 例外処理と意味するすべての言い回しをチェックしました
  • 輸入品の長いリスト

を使用するという Java の慣習に関連してveryLongVariableNames、80 年代に戻ってプログラムの一番上に書いているように思うことがありIDENTIFICATION DIVISION.ます。

ヒント: IDE でコードの一部の生成を自動化できる場合、それはボイラープレート コードを作成しているという良いヒントです。自動化されたツールでは、書くことは問題ではありませんが、誰かがそのコードを読まなければならないたびに、それが邪魔になります。

型の官僚主義に少し行き過ぎていると思いますが、Scala はこれらの懸念のいくつかにうまく対処しています。

于 2009-12-01T23:43:11.583 に答える
4

チームプロジェクトにおけるコーディングスタイルの不一致。

一部の寄稿者がタブ文字の代わりに4つのスペースを使用している大規模なチームプロジェクトに取り組んでいます。彼らのコードでの作業は非常に煩わしいものになる可能性があります-私は自分のコードをクリーンで一貫したスタイルに保つのが好きです。

言語ごとに異なる標準を使用する場合は十分に悪いですが、HTML、CSS、Javascript、PHP、およびMySQLを使用するWebプロジェクトでは、5つの言語、5つの異なるスタイルであり、プロジェクトで作業する人の数を掛けたものです。

何かを修正する必要があるときに同僚のコードを再フォーマットしたいのですが、リポジトリは、コードのすべての行を変更したと見なします。

于 2008-10-02T13:55:36.787 に答える
3

大文字と小文字の区別。

2つの識別子をcaSEだけで区別するのは素晴らしいアイデアだと考えるには、どのような二日酔いが必要ですか?

于 2008-10-02T07:42:50.707 に答える
3

Microsoft が C# でさらに別の C++ に似た言語を発明しなければならなかった場合、なぜ彼らは Java の間違いを修正し、RAII のサポートを実装しなかったのでしょうか?

于 2008-10-02T07:30:01.860 に答える
3

順不同で・・・

OCaml

  • タプルの定義は*、 ではなく項目を区切るために使用されます,。だから、("Juliet", 23, true)タイプを持ってい(string * int * bool)ます .

  • そのような素晴らしい言語であるため、ドキュメントにはスレッドに関する次の忘れられないコメントがあります。 JoCamlはこの問題を解決しません

  • ^^^ Jane Street の連中が並行 GC とマルチコア スレッドを OCaml に追加しようとしていると聞いたことがありますが、彼らがどれほど成功したかはわかりません。マルチコア スレッドと GC のない言語が非常に長く存続することは想像できません。

  • トップレベルでモジュールを探索する簡単な方法はありません。確かに、あなたが書くことはできmodule q = List;;、トップレベルは喜んでモジュール定義を出力しますが、それはハッキーに思えます。

C#

  • お粗末な型推論。最も些細な式を超えて、ジェネリック関数に型を与える必要があります。

  • 私が今まで読んだすべての LINQ コードは、メソッド構文を使用していますx.Where(item => ...).OrderBy(item => ...)。式構文を使用する人は誰もいませんfrom item in x where ... orderby ... select。あなたと私の間では、他のすべての C# および VB.NET コードの背景に対して "異質" に見えること以外の理由がなければ、式の構文はばかげていると思います。

リンク

他のすべての言語は、Map、Fold/Reduce/Inject、および Filter という業界標準の名前を使用しています。LINQ は異なる必要があり、Select、Aggregate、および Where を使用します。

関数型プログラミング

モナドは不可解です。Parser モナド、Maybe モナド、State、List モナドを見たので、コードがどのように機能するかを完全に理解できます。しかし、一般的な設計パターンとして、私は問題を見て「モナドがここにぴったり合うに違いない」と言うことができないようです。

ルビー

うわあああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!つまり... 真剣に。

VB

Module Hangups
    Dim _juliet as String = "Too Wordy!"

    Public Property Juliet() as String
        Get
            Return _juliet
        End Get
        Set (ByVal value as String)
            _juliet = value
        End Set
    End Property
End Module

そして、セッター宣言は私の存在の悩みの種です。よし、プロパティのデータ型を変更します。今度はセッターのデータ型も変更する必要がありますか? なぜ VB は C# から借用して、値と呼ばれる暗黙の変数を単純に組み込まないのですか?

。ネットフレームワーク

個人的には、Java の大文字と小文字の規則が好きです。クラスは PascalCase、メソッドとプロパティは camelCase です。

于 2009-12-02T00:21:23.770 に答える
3

私はセミコロンが嫌いです。それらは多くのノイズを追加し、2 つのステートメントを 1 行に並べる必要はほとんどありません。私は Python や他の言語のスタイルを好みます... 行末は文の終わりです。

于 2009-02-22T20:45:12.917 に答える
3

人々がすべての仕事に 1 つの言語を使用することを期待していることに、時々イライラします。実行しているタスクに応じて、各言語には長所と短所があります。私は C ベースの構文言語が好きです。それは私が最も慣れ親しんでいる言語であり、開発者に与えられる傾向がある柔軟性が好きだからです。もちろん、大きな権限には大きな責任が伴います。150 行の LINQ ステートメントを記述できるからといって、そうすべきだというわけではありません。

VB.NET の最新バージョンのインライン XML が気に入っていますが、IDE は C# の IDE よりも役に立たないことが主な理由で、VB での作業は好きではありません。

于 2008-10-02T05:33:32.467 に答える
2

Rubyでは、現在のインスタンスでメソッドを呼び出す必要がない方法が非常に嫌いですself.が、プロパティは呼び出す必要があります(そうしないと、ローカルと衝突します)。すなわち:

def foo()
   123
end

def foo=(x)
end

def bar()
    x = foo() # okay, same as self.foo()
    x = foo   # not okay, reads unassigned local variable foo
    foo = 123 # not okay, assigns local variable foo
end

私の考えでは、それは非常に一貫性がありません。私はむしろself.、すべての場合に常に要求するか、地元の人々のために印章を持っていることを好みます。

于 2009-12-01T23:26:25.287 に答える
2

SQL では、カーソルを使用してはならないと言われていますが、カーソルを使用すると、
その理由がよくわかります...とても重いです!


    DECLARE mycurse CURSOR LOCAL FAST_FORWARD READ_ONLY
        FOR
        SELECT field1, field2, fieldN FROM atable

    OPEN mycurse
    FETCH NEXT FROM mycurse INTO @Var1, @Var2, @VarN

    WHILE @@fetch_status = 0
    BEGIN
        -- do something really clever...

        FETCH NEXT FROM mycurse INTO @Var1, @Var2, @VarN
    END
    CLOSE mycurse
    DEALLOCATE mycurse

于 2008-10-02T07:32:54.147 に答える
2

Perl の「定義済み」値と「未定義」値の使用は非常に便利であるため、それなしではスクリプト言語を使用するのに苦労しました。

パール:

($lastname, $firstname, $rest) = split(' ', $fullname);

このステートメントは、$fullname にいくつの単語が含まれていてもうまく機能します。Python で試してみてください。$fullname に 3 つの単語が含まれていないと爆発します。

于 2008-10-02T06:32:13.043 に答える
2

C/C++ では、同じコードをさまざまな方法で記述できることに悩まされます。

例えば

if (condition)
{
   callSomeConditionalMethod();
}
callSomeOtherMethod();

対。

if (condition)
   callSomeConditionalMethod();
callSomeOtherMethod();

同じものと同じですが、人によってスタイルが異なります。元の基準がこれについて決定を下すことについてもっと厳格であったことを願っています。そうすれば、このあいまいさがなくなります。コードレビューでの議論や意見の相違につながります!

于 2008-10-02T05:26:20.317 に答える
2

私は主にPythonでプログラミングしていますが、ラムダ本体が式でなければならないことに際限なくイライラします。

私はまだ JavaScript に頭を悩ませていますが、全体としては、ほとんど受け入れられます。名前空間を作成するのが難しいのはなぜですか。TCL では醜いだけですが、JavaScript では実際にはぎこちなく、完全に判読できません。

SQL では、すべてが 1 つの巨大なフリーキン SELECT ステートメントにすぎません。

于 2009-02-22T20:28:04.410 に答える
1

Java

  • ジェネリック(テンプレートのJavaバージョン)には制限があります。クラスのメソッドを呼び出すことができず、クラスのインスタンスを作成できません。ジェネリックはコンテナーによって使用されますが、Objectのインスタンスのコンテナーを使用できます。
  • 多重継承はありません。多重継承の使用が菱形継承問題を引き起こさない場合は、それを許可する必要があります。問題の例である、インターフェースメソッドのデフォルト実装を記述できるようにする必要があります。インターフェースMouseListenerには、イベントごとに1つずつ、合計5つのメソッドがあります。それらの1つだけを処理したい場合は、他の4つのメソッドを空のメソッドとして実装する必要があります。
  • 一部のオブジェクトのメモリを手動で管理することを選択することはできません。
  • Java APIは、クラスの複雑な組み合わせを使用して単純なタスクを実行します。たとえば、ファイルから読み取りたい場合は、多くのクラス(FileReader、FileInputStream)を使用する必要があります。

Python

  • インデントは構文の一部です。ブロックの終わりを示すために「end」という単語を使用することを好みます。「pass」という単語は必要ありません。
  • クラスでは、関数の引数として「自己」という単語は必要ありません。

C ++

  • ヘッダーは最悪の問題です。関数をヘッダーファイルにリストし、cppファイルに実装する必要があります。クラスの依存関係を隠すことはできません。クラスAがクラスBをフィールドとしてプライベートに使用する場合、Aのヘッダーを含めると、Bのヘッダーも含まれます。
  • 文字列と配列はCからのものであり、長さフィールドを提供しません。std::stringとstd::vectorがスタックまたはヒープを使用するかどうかを制御することは困難です。代入を使用する場合は、std::stringとstd::vectorでポインターを使用する必要があります。関数に引数として渡すか、関数を返す必要があります。これは、「=」演算子が構造全体をコピーするためです。
  • コンストラクタとデストラクタを制御できません。デフォルトのコンストラクターなしでオブジェクトの配列を作成したり、ifおよびswitchステートメントで使用するコンストラクターを選択したりすることは困難です。
于 2011-04-15T23:52:25.170 に答える
1

Prologのif-then-else構文。

x -> y ; z

問題は、「;」が「 」演算子であるため、上記は「意味する」または「 or」のように見えることです。xyz

于 2008-10-06T01:34:38.493 に答える
1

Java のパッケージ。私は企業ではないので、複雑だと思います。私は名前空間を非常に好みます。もちろん、私はそれを乗り越えます - 私は Android SDK で遊んでいますが、Eclipse は多くの苦痛を取り除いてくれます。これまでインタラクティブに実行できるマシンはありませんでしたが、今では非常に感心しています。

于 2008-10-02T06:38:59.503 に答える
0

[免責事項:私はVBに精通しているだけなので、一粒の塩でコメントしてください]

VBのすべてのキーワードがこのように大文字化されるのが嫌いです。先週(月?)大文字なしでVBコードを書こうとした人についてのブログ投稿を見ました(彼らはコンパイラーにそのようなVBコードをコンパイルさせる何かをしました)、そして言語はずっと良く見えました!

于 2009-12-01T23:06:38.507 に答える
0

私の大きな問題はMATLABの構文です。私はそれを使っています、そしてそれについて私が好きなものがあります、しかしそれはとても多くの厄介な癖を持っています。どれどれ。

  • 行列は括弧で索引付けされています。したがって、Image(350,260)のようなものが表示された場合、Imageマトリックスから要素を取得しているのか、Imageという関数を呼び出して引数を渡しているのかはわかりません。
  • スコープは非常識です。forループのインデックス変数は、ループが終了した後もスコープ内にとどまっていることを思い出しているようです。
  • 割り当て後にセミコロンを付けるのを忘れた場合、値は標準出力にダンプされます。
  • ファイルごとに1つの関数を使用できます。これは、自分の仕事を整理するのに非常に迷惑であることがわかります。

考えてみればもっと思いつくと思います。

于 2009-09-18T19:27:51.343 に答える
0

C# でのハングアップは非常に単純です。

  1. スコープ付きブロック

書けたらいいのに

with SomeObject
{
    .Property = "Some value";
    .Event();
}

それ以外の:

SomeObject.Property = "Some value";
SomeObject.Event();

特に、StringBuilder の Append、AppendFormat を使用すると、コードが読みにくくなります。

  1. ヌル

私は次のように言えたらいいのにと思います:

var result = SomeObject.SomeCollection.First().SomeProperty ??? "Default value";

それ以外の:

string result = string.Empty;

if ( SomeObject != null && SomeObject.SomeCollection.Count() > 0 )
{
    result = SomeObject.SomeCollection.FirsT().SomeProperty;
}
else
{
     result = "Default value";
}

私は NullExceptions が嫌いで、複数のレベルの深さで機能するスムーズな null 合体が必要です。

于 2011-06-22T21:40:46.780 に答える
0

Python では、何かがオブジェクトのメソッドなのか、それともランダムな関数なのかがわからないのが嫌いです (組み込み関数を参照)。彼らは言語をオブジェクト指向にし始めたが、その後手を緩めたように感じます。このような関数を、Object などの基本クラスのメソッドにする方が理にかなっています。

__methodName__私は- スタイルのメソッドも嫌いです。本当にそうしたいのであれば、クラスの外部からクラス内のプライベートなものにアクセスすることもできます。

空白の要件は私を悩ませます。言語設計者が特定の方法でコードを作成することを望んでいません。

私は、Python が準拠している、何かを行うための 1 つの正しい方法の理想が好きではありません。オプションが欲しい。

于 2009-12-02T18:53:28.550 に答える
0

とった。

私は過度に厳密な静的型付き言語すべてに恨みを持っています。

次のようなコードを書かざるを得なくなるまで、C# は素晴らしいと思っていました。

void event...(object sender,EventArgs e){
  int t=(int)(decimal)(MyControl.Value); //Value is an object which is actually a decimal to be converted into an int
}

ああ、属性は醜いです。Microsoft は真剣に、 [MyAttribute(Argument)] void function...Seriously よりも醜いものを真剣に考えていないでしょうか。なんだ?私に XAML マークアップを始めさせないでください..

空白の問題があるため、Pythonを真剣に受け止めることはできません..

ときどき、Ruby を真剣に受け止めることができないことがあります。

a) Why's Poignant Guide から独学しました

b) 場合によっては、識別子の種類が大文字と小文字で決まります。私はこれを過ぎて成長しましたが、constキーワードよりも賢明でクリーンなためです。現在、すべての言語で定数を作成すると大文字になります。

ああ、私も嫌いです

if(a)
  b();

構文。私が何回やったかあなたにはわからない

if(a)
  b();
  c();

そのように書かれたコードで偶然..実際には、

if(a)
  b(); c();

使用できる唯一の場所は

if(a){ ....
}else if(b){ ...
于 2009-12-01T23:42:51.723 に答える
0

私は Lisp と Scheme の括弧が大嫌いでした。なぜなら、C、C#、およびそのような言語の後では、括弧は非常に難読化されているように見え、物事がどのように関連しているかが明確ではなかったからです。しかし、Scheme についてある程度理解できたので、それが通常の書式設定ガイドラインであるため、その動作が気に入っているとは言えませんが、CLisp/Scheme で記述されたコードを読むときの恐怖を少なくとも理解し、克服しています。

何かを学んでしばらく使ってみると(少なくとも私の場合は数時間でも十分だったかもしれません)、構文に対する嫌悪感を実際に克服でき、想定されていることに集中できるようになると思います。言語であるツールで実際に行うこと。

于 2009-02-22T20:17:16.090 に答える
0

tsql の開始と終了...それは面倒です...

于 2009-02-28T05:42:24.597 に答える
-1

複数の言語に適用されます:

  1. 大文字と小文字の区別 - 誰のアイデアでしたか?! (そして、何かを意味する複数の単語と、別の意味で何かを意味する複数の単語を使用する人は撃たれるべきです:)

  2. 配列のインデックスは 0 から始まります。私は Fortran のバックグラウンドを持っているので、それも理由の 1 つですが、数学では配列のインデックスは常に 1 から始まるため、大きなモデルを実装するときに (特にデバッグ時に) 多くの頭痛の種になる傾向があります。

  3. セミコロン - コード内のジャンクです。コード (fortran、python など) を慎重に作成している場合は、それらは必要ありません。そうでなければ、彼らはあなたを救ってくれません。

  4. 中括弧 - 3 を参照してください。

psそこにいる皆さん。怒らないで。答えが気に入らないなら、質問すべきではなかった。

于 2009-02-22T21:05:20.047 に答える
-5

私は、他の人のコードを調べてデバッグする何年ものコードからの実用的なものを持っています。条件文で論理演算をグループ化する機能を(すべての言語から)削除します。これは、AND演算子に関する特定の不満から来ています。

if (a and b)
{
  do something
}

4つのケースがあり、そのうち3つは処理されていません。プログラマーは4つのケースすべてを考慮し、意図的にこの方法でコードを記述することを選択した可能性がありますが、コードにコメントを付けない限り、そのようなことを示すものはありません。通常はそうではありません。

もう少し冗長かもしれませんが、以下は明白です...

if (a)
{
    if (b)
    {
        do something
    }
    else
    {
        what about this case?
    }
}
else
{
    if (b)
    {
        what about this case?
    }
    else
    {
        do something else
    }
}

少なくとも1年後にフォローアップする貧しい人として、私は何が起こっているのかを正確に知るでしょう。

于 2008-10-02T07:53:35.393 に答える