- PR -

VB2005の言語仕様の落とし穴について(ソース付き)

投稿者投稿内容
KI
大ベテラン
会議室デビュー日: 2007/01/10
投稿数: 239
投稿日時: 2007-04-21 13:37
ちょっと話が違いますが、
メソッド呼び出しの「()」が省略できるだけでなく、
逆にプロパティの後ろにも「()」を付けてもエラーにならないんですよね。

こんな風にハマったことはないですが、見難くなるので、
私のプロジェクトではコーディング規約で
メソッドはら「()」をつけて、プロパティはつけないことと決めています。
コンパイラでチェックできるオプションが欲しいとは前から思っていましたね。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-04-21 14:12
引用:

KIさんの書き込み (2007-04-21 13:37) より:

メソッドはら「()」をつけて、プロパティはつけないことと決めています。
コンパイラでチェックできるオプションが欲しいとは前から思っていましたね。


このあたりは、再フォーマットされるだけでも嬉しい範囲なのですが、
'戻り値を利用するような' 呼び出しでは、再フォーマット対象にならないのが問題ですね。

それと、'引数のない' プロパティに関して全く無視なのは、昔から変わっていないです...

コードのポリシーを自分で定義できて、IDE に適用できると嬉しいのですが、
そういう機能がどこかにあったような、ないような...

# 最近触れる環境にいない (Linux) ので、確認すらできないんですよねww orz

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-04-21 14:53
引用:

囚人さんの書き込み (2007-04-21 13:13) より:
「言語仕様の落とし穴」とはうまい表現ですね。まさに落とし穴みたいです。多くの要素が逆の意味で巧い具合に合わさっていますね。

1. メソッド呼び出しとインデクサの呼び出しがどちらも「()」
2. メソッド呼び出しの「()」が省略できる
3. Char が String に拡張される。

個人的には 2 をやらないのでハマる事はなさそうですが、人の書いたコードを見たときに混乱しそうです。というか言語仕様として 2 をなしにしてほしかった。



 元々「関数」ですから、カッコが無ければ関数にならないのにね。
 ただ、引き渡すものがないなら、「定数」の様にも見せられるので・・・何かを変化させるのが関数だとしたら、何かのない関数は定数である・・・、取り入れられたのかも。

 まぁ、キーボードを打つ回数を減らすことが目的のような気もするけど。
_________________
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2007-04-21 14:59
引用:

KIさんの書き込み (2007-04-21 13:37) より:

私のプロジェクトではコーディング規約で
メソッドはら「()」をつけて、プロパティはつけないことと決めています。
コンパイラでチェックできるオプションが欲しいとは前から思っていましたね。


これって言語仕様にしてしまっても良い気がしますけどね。
配列が [] でなく () であることと何等変わりないと思いますし。

#N-BASIC の配列は [] だったのに。
_________________
R・田中一郎 -  R.Tanaka.Ichiro’s Blog
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2007-04-21 15:08
引用:

R・田中一郎さんの書き込み (2007-04-21 14:59) より:

#N-BASIC の配列は [] だったのに。


細かいですが、N-BASIC の配列は () です。
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2007-04-21 16:37
引用:

objectです。

>囚人さん
私も、ほぼ同じ意見です。

言語というのは、全体として
「ヒエラルキー(階層)を構成している」
と思います。

そして、
「():ほぼトップレベルで重要な徴表」
だと思います。

そういう意味では、
「インデクサの呼び出しが:()」
も、あってはいけない事だと思います。
#「C#」が「[、]」を用いているのは、そんな軽い事ではないと私は思っています。
#プロパティを「()」で定義するのもナンセンスだと思います。
#これでは「Java」と同じです。


まぁ、そこまで大層な事は思っていないのですが、配列のアクセサは [] の方がよかったような気もしますね。


引用:

 元々「関数」ですから、カッコが無ければ関数にならないのにね。
 ただ、引き渡すものがないなら、「定数」の様にも見せられるので・・・何かを変化させるのが関数だとしたら、何かのない関数は定数である・・・、取り入れられたのかも。

 まぁ、キーボードを打つ回数を減らすことが目的のような気もするけど。


これが、Sub プロシージャだと、もうわけがわからなくなるんですよね。

コード:
Module Module1

    Sub Main()
        S
        F
        Console.WriteLine(F)
    End Sub

    Sub S()
        Console.WriteLine("S")
    End Sub

    Function F() As String
        Return "F"
    End Function

End Module



と思ったら Visual Studio の「コードの再フォーマットを有効」にしていたら強制的に以下のように
コード:
Module Module1

    Sub Main()
        S()
        F()
        Console.WriteLine(F)
    End Sub

    Sub S()
        Console.WriteLine("S")
    End Sub

    Function F() As String
        Return "F"
    End Function

End Module


なぜ、他のメソッドの引数のとき(Console.WriteLine(F))では F に () がつかないのか…。

_________________
囚人のジレンマな日々
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2007-04-23 13:36
引用:

ぽぴ王子さんの書き込み (2007-04-21 15:08) より:

細かいですが、N-BASIC の配列は () です。


あれ?
記憶違いだったのですね。ごめんなさい。
_________________
R・田中一郎 -  R.Tanaka.Ichiro’s Blog
ゆか
ベテラン
会議室デビュー日: 2004/04/06
投稿数: 75
投稿日時: 2007-04-23 16:06
質問者です。
みなさん、いろいろな意見をいただきありがとうございます。
大変勉強になりました。

> そこで、質問です。
> エラー、ワーニングを出す方法ってあるのでしょうか?
についての回答をいただければ、本当に有り難く思います。
どなたか、ご存知ないでしょうか?
よろしくお願いします。

スキルアップ/キャリアアップ(JOB@IT)