1. ホーム
  2. javascript

[解決済み] JavaScript以外の言語では、ブレースの開始位置(同じ行と次の行)に違いがあるのでしょうか?

2023-03-13 07:57:58

質問

今日、オライリーのJavaScriptパターンを適当に読んでいたら、ひとつ面白いことを見つけました(参考までに27ページ)。

Javascriptでは、場合によっては、braceの開始位置が異なると差異が生じます。

function test_function1() {
    return
    {
        name: 'rajat'
    };
}

var obj = test_function1();
alert(obj);  //Shows "undefined"

一方

function test_function2() {
    return {
        name: 'rajat'
    };
}

var obj = test_function2();
alert(obj); //Shows object

JSfiddleデモ

他の言語でもこのような動作があるのでしょうか?もしそうなら、私は確実に習慣を変えなければならないでしょう...:)

私は主に、PHP、C、C++、Java、rubyについて心配しています。

どのように解決するのですか?

どのような は、文を区切るのにセミコロンに頼らず(代わりに改行で)、潜在的にこれを可能にする言語です。考慮すべきは Python :

>>> def foo():
...   return
...   { 1: 2 }
... 
>>> def bar():
...   return { 1: 2 }
... 
>>> foo()
>>> bar()
{1: 2}

で同様のケースを構築できるかもしれません。 ビジュアルベーシック でも、VBは値が置かれる場所にかなり制限があるので、私の頭の上からでは、どのようにするのかわかりません。しかし、静的アナライザーが到達不可能なコードについて文句を言わない限り、以下のように動作するはずです。

Try
    Throw New Exception()
Catch ex As Exception
    Throw ex.GetBaseException()
End Try

' versus

Try
    Throw New Exception()
Catch ex As Exception
    Throw
    ex.GetBaseException()
End Try

紹介された言語から ルビー は同じ性質を持っています。PHP、C、C++、Javaは、改行を空白として破棄し、文を区切るためにセミコロンを必要とするので、単純にそうではありません。

以下は、Pythonの例からRubyで同等のコードです。

>> def foo
>>   return { 1 => 2 }
>> end
=> nil
>> def bar
>>   return
>>   { 1 => 2 }
>> end
=> nil
>> foo
=> {1=>2}
>> bar
=> nil