6

Python を含む多くのプログラミング言語は、次のような操作をサポートしています。

", ".join(["1","2","3"])

文字列を返す

"1, 2, 3"

これが事実であることは理解していますが、その背後にある設計上の決定は理解していません-確かにjoin、次のようにリストに対して操作を実行する方が意味的に有効です。

["1","2","3"].join(", ")

誰かがデザインの決定を説明し、それに光を当てることができれば、私はそれを感謝します.

編集: Javascript がjoinリストにメソッドを持っているようです。特定の言語が従う規則の例を誰かが持っている場合は、その特定の言語での選択についても自由にコメント/回答してください。

4

1 に答える 1

3

Python については、いくつかの反対意見があります。まず、任意の iterable を受け入れる文字列メソッドの場合、文字列オブジェクトでメソッドをサポートするだけでよく、join自動的に iterable で動作します。それ以外の場合、カスタムの反復可能なオブジェクトもjoinメソッドなどをサポートする必要があります。

検討:

", ".join(["1","2","3"])
", ".join(("1","2","3"))
", ".join(str(x) for x in xrange(1,4))
", ".join({'1':None,'2':None,'3':None})
", ".join({'1','2','3'})  #set literal syntax -- python2.7+
", ".join("123")

6 つの異なる型はすべて、1 つのメソッドで非常に簡単にサポートされます (組み込みの型だけに触れました)。

join次に、リスト内のすべてがbasestringタイプである場合にのみ、リストを作成できます。間違った内容のリストで使用すると例外が発生するリストにメソッドを提供するのはばかげているように思えます -- 少なくとも、ここでの API は (私には) ややこしいようです もちろん、list.remove間違った引数で呼び出された場合に例外が発生する可能性があると主張することもできます。それは本当です -- しかし、一般的には、1 つのアイテムだけを削除するということです。本来よりも低いレベルで動作しますjoin。もちろん、この議論は私が最初に提案したものよりも弱いので、それが気に入らない場合は、議論 1 に頼ってください。

于 2013-04-30T13:44:12.510 に答える