s = "" + i;でintをStringに変換するのはなぜだめか

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2010/08/02(月) 23:30:13
2010/08/06(金) 23:53:59
>>51
boost::format はでかすぎなのと % がきもい
(s)printf と比べてメリットがそんなになさそう
2010/08/07(土) 00:11:46
>>57
printf/scanfはそもそも安全でないので話にならない。

C++でテンプレートが導入されたのは比較的新しい。
2010/08/07(土) 01:03:32
初期のC++を知らない世代になったんだな。

初期のC++にないもの。
・テンプレート
・例外

メモリの割り当てに失敗したら例外発生するんじゃなくて
NULL返すんだぜ。
2010/08/07(土) 08:02:44
protectedもなかったな。
2010/08/07(土) 08:27:56
今でも、テンプレートと例外は、いろいろ問題があるので、わざと使わないこともある。
2010/08/07(土) 13:59:34
>>60
それって90年代の中頃にはすでにあっただろ。
無い時代のC++知ってるのって、そうとうおっさんだけなんじゃない。
2010/08/07(土) 14:19:27
>>63
どっちにしても、テンプレートないころからiostreamはある。
2010/08/07(土) 14:51:09
初めてC++使ったの91年だけどテンプレートはあったな
2010/08/07(土) 14:53:39
俺がベル研にいたころはニューバランス履いてたけどまだ髪はあったな
2010/08/08(日) 08:28:44
初期のC++のコンテナは最悪だった
マクロとかvoid*使ってたんだぜ
2010/08/08(日) 08:51:41
ただのPPだったからな
2010/08/08(日) 12:30:04
generic.h なんて思い出させるなwww
2010/08/09(月) 11:30:06
awkの文字列連結は直感的。単にオブジェクトを並べるだけ。だから、こんなこともできる。
--
awk 'BEGIN {i = 10; j = 20; print i j;}'
--
これで 1020 と出力されるのだけど、裏を返せばTypoが怖いw
2010/08/09(月) 12:43:49
>70
C言語系書式のfor文と勘違いして混乱したじゃねーか
2010/08/09(月) 12:44:26
awkはガチ
2010/08/09(月) 13:52:25
同じ動的言語でも
Perlやawkは型の区別が無いが演算子は区別してる例
PythonやRubyは演算子は同じだが型付けが強く文字列と数値を自動的にcoerceしない
>>1の例はエラーになる)
だな

この両者に比べると>>1式はひどいように思う
JavaScriptは文字列にcoerceするので、数値を""と足すと文字列化になるが
バッドノウハウ的だし意図せぬ誤りの元

が、もっとひどいのがPowerShell
1+"2" -> 3
"1"+2 -> "12"
こうなるんだぜ
2010/08/09(月) 15:21:13
どこが酷いんだかさっぱりわからん。
>>73が何も分かってないだけだろw

>>1の意図は明らかにそういう奴をおちょくることにあるんだが、
まあ、おちょくりの対象側の人間にとってはこの通り蛙の面にしょんべんだわな。

なにせ自分の無理解の自覚がないんだからw
2010/08/09(月) 15:45:23
よせやい、褒めるなよ。照れるじゃないか。
2010/08/09(月) 19:50:13
>73
演算子の左辺の型によって演算子の挙動が変わるのか
いかにもバグの元になりそうな仕様だな
2010/08/09(月) 22:11:46
>>76
やっぱりわかってないな。
2010/08/10(火) 00:27:47
【法律】「ウイルス作成罪」創設へ 刑法改正を検討(10/08/09)
http://hibari.2ch.net/test/read.cgi/pcnews/1281355124/
2010/08/10(火) 01:34:12
コピペ君って馬鹿だな、まで読んだ。
2010/08/10(火) 06:35:22
残念だけどそれもコピペなんだよね
2010/08/10(火) 07:40:16
どう?
でもいい
2010/08/12(木) 08:27:15
>>73
1.+("2") -> 3
"1".+(2) -> "12"
うん、至って普通の動作だ
2010/08/12(木) 10:35:38
+を使うセンスの無さ
2010/08/12(木) 10:40:31
ZuSZSSっzっsqzyzっszんrbdんtrwfbmdsnSnzzzZQ
2010/08/12(木) 12:30:33
>>82
これを見てもそう思う?
1 + 0.5 -> 1.5
0.5 + 1 -> 1.5

PowerShellでも
1 + 0.5 は1にはならない(勿論.NETなので、1と0.5の型は違う)
糞ほどのセンスも感じられない一貫性の無さだね
2010/08/12(木) 12:35:40
>>85
もっと勉強しろ
2010/08/12(木) 12:59:51
>>85
ちゃんとスレ読んでるか?
8885
垢版 |
2010/08/12(木) 13:04:52
いやよんでねえw

Int32 + String -> Int32
String + Int32 -> String

Int32 + Double -> Double
Double + Int32 -> Double

この仕様は君らにとってはOKなわけか、俺にはわからんわw
何でOKなのか教えてくれない?
2010/08/12(木) 13:07:41
>>88
文句は Perl に言ってくれ
2010/08/12(木) 13:08:43
何でPerlの話が出てくんのw
関係ないじゃん
2010/08/12(木) 13:27:47
実装側の頭があればすぐにわかることジャマイカ。
2010/08/12(木) 13:49:02
>>91
実装都合なんて無意味じゃね?
これと違う仕様にも実装できるし、事実そうなっている言語はたくさんある
純粋に仕様として綺麗か汚いかって話だと思うんだが
2010/08/12(木) 14:22:39
1 + "0.5"→1.5
(Int32 + String -> Double)
単純に左オペランドの型に変換しているわけではない模様

"1" + .5 -> "10.5"
"1" + 10e2 -> "11000"
"1" + 10e100 -> "11E+101"

この辺はこうなる、予想の範囲だが
2010/08/12(木) 14:48:13
春 21世紀枠に負けるとは末代までの恥
夏 エラーと落球で逆転を許すとは末代までの恥
2010/08/12(木) 22:32:21
こういうのって基本的に人間様が楽をするための仕様じゃないの?
2010/08/13(金) 00:04:42
型が緩すぎると他人のコードを読むのがしんどいからよくないって話はたまに聞くね。

書きなぐるコードじゃないなら型が厳しい方が好きだ。
2010/08/13(金) 18:02:29
確かに保守するなら型厳しい方が好きだわ。
型厳しいとIDEも頭良くなれるし。
2010/08/13(金) 20:50:26
sage test
2010/08/13(金) 21:02:45
だから>>1みたいのは型が緩いわけじゃないっての。
むしろユルいのはお前さんの頭(以下略

>>85
よくある愚論だけど、別に(プログラミング言語の設計において)全てにおいて
一貫性が優先されるわけじゃない。

直感的であることと表面的な一貫性が矛盾する場合、どっちを優先すべきかは明らか。

数値同士の演算結果が前のオペランドの型になるような仕様が嬉しい奴はいない。

stringの+演算子が、片方のオペランドのToString()を呼び出すように定義されている
(C#の場合)のは、自然で直感的な仕様だ。
2010/08/13(金) 21:06:47

"3" * 5 -> "33333"

これはどう思う?
2010/08/13(金) 21:30:40
perlのx演算子か。
2010/08/13(金) 22:50:16
>>99
意味わからん
C#だと
"1" + 2 も 1 + "2" も string になるからPowerShellと違って一貫してるだろ

"1" + 2が"12"になって1 + "2"が3になる仕様が自然で直感的だってのも
お前が脳内で考えてるだけじゃね?

つか、バカじゃないの?
103デフォルトの名無しさん
垢版 |
2010/08/13(金) 23:19:57
>>102
もちろん馬鹿。いや君がね。

そういう言い方をするのなら、
「"1" + 2が"12"になって1 + "2"が3になる仕様は一貫性がなく不自然だ」
というのも、たかだかお前さんのウンコ脳の見解に過ぎないわけだが。

そもそも一貫性っていったって物差しの置き方次第でなんとでもいえるんだが、
自分がいったい何を基準に一貫性って言ってるのか、自覚してるか?

PowerShellについては俺は知らんが、仮に「数値同士以外の場合、演算子は
最初のオペランドの型に対する操作だとみなす」というルールだとして、
そうであるならそれなりに合理的だ。
2010/08/13(金) 23:27:42
>>103
> 数値同士以外の場合、演算子は最初のオペランドの型に対する操作だとみなす
いや例外を設けてる時点で、一貫性という観点では例外の不要なルールより
明白に劣るだろ
一貫性って日本語の意味わかってまちゅかー?

本気でアホなんだな
さすがいきなり他人をユルいとかアホとか言い出すだけはあるわ
2010/08/13(金) 23:33:28
>>100
*てことはPythonか

それは定義域がstrとintの演算として定義されてるから
いいんじゃねーの知らんけどw
2010/08/13(金) 23:39:57
>>104
とことんお馬鹿だな。
だから、何故そんなに「一貫性」が重要なのだと言ってるだろう。
まずそこに答えてくれ。まあそんな必然性は無いから無理だと思うがな。

そういうのを「馬鹿の一つ覚え」というんだよ。
そんなものより、柔軟に暗黙的は変換が行われるほうが大事だ、
という立場もありうる。世の中の価値観が一つしかないとでも思ってるのか。

ちなみにお前さんの言っているのは(君は自覚してないようだが)
たかだか「演算子は交換法則が成立します」という形式的な一貫性に過ぎない。

一貫性という言葉にこだわるのなら、>>102のような仕様は、
「暗黙的な型変換が柔軟に行われる」という思想に照らして一貫しているということもできる。
2010/08/13(金) 23:43:07
>>106
頑張るねえw
おまえの言う「自然で直感的」より格段に客観的な尺度だろ
例外が不要なシンプルなルールのほうが理解しやすいから、
通常は自然で直感的にもなる

逆に言えば、一貫性を犠牲にしてPowerShellのユーザが享受できる
利点は何だ?

つーか、よく読まずにC#なんて的外れな例持ち出してきて他人罵倒したから
ひっこみがつかなくなったか?w
馬鹿な犬ほど良く吠えるって奴だなw
2010/08/14(土) 00:04:44
>よく読まずにC#なんて的外れな例持ち出してきて
>>1
2010/08/14(土) 00:07:10
>>108
お前はcontextを読めよw
PowerShellに関する話題へのレスだろw
110デフォルトの名無しさん
垢版 |
2010/08/14(土) 00:22:04
>contextを読めよ
どの面さげてそういうことが言えるのか。
そもそも>>73も君じゃねえの?

まあ何れにせよ君が言ってることがトンチキなのは間違いないが。
2010/08/14(土) 00:25:36
だから何がトンチキなのかちゃんと言ってみろってw

>>1に関しては、JavaやC#みたいな静的型言語なら別にいいんじゃねーの?
としか思わんな

動的型だと
foo + bar
が何やってんだか一見わかりにくいことが多いから、
Python/Ruby/Perl/Awk式のほうが好きだよ俺は

まあ+がオーバーロードされているJavaScriptにしても
PowerShellほどはひどくねーけどな
2010/08/14(土) 00:31:24
で、話題そらしはじめたってことは
PowerShellの擁護すんのは諦めてとにかく難癖だけはつけたいってことで
いいのか?w

ちょっとは具体的なことを語れるやつみたいだからつきあってやったが
所詮は罵倒しか脳の無いアホだったかw
2010/08/14(土) 00:49:23
はいはい、そのとおりだね。
夏休みの中盤に名にやってんの
さっさと練れ
2010/08/14(土) 01:35:47
通常
b = a + 1
ってコードがあったらほぼ確実に「1を足す」という意図だし、読み手もそう読む

が、動的型だと、aに"foo"等が入ってくることも有り得る(通常それはバグだ)
その場合、PythonやRubyはエラーにしてくれるが
JavaScriptでは黙ってbに"foo1"が入る

勿論静的型ならこうした問題はそもそも発生しない

それと、
"I paid " + n + "dollars"
みたいなのは、LL言語なら
"I paid $n dollars"
のように書けたほうがずっと読み書きやすい

Pythonなら "I paid %d dollors" % n になるが、テキストが分裂せず一箇所に
まとまっているので、やはりこっちのほうが読みやすい
ついでに数値フォーマットも正確に指定できるというご利益がある

ところでPowerShellでは、
"I paid " + $n + " dollars"と同じ調子で
$n + "% completed"
とか書いたら、$nが数値の場合にはoperator +の意味が変化してエラーになるわけだ

これが非一貫性の引き起こす問題、美的でないだけでなく
無駄に罠的な仕様でありError Pruningって奴だぜ
2010/08/14(土) 02:14:15
ブーン
ブーン
カー?
2010/08/15(日) 23:45:29
議論?をするうえでいちいち相手をバカ呼ばわりするのは合理的なのだろうか。
2010/08/16(月) 02:17:28
2chじゃデフォ
118デフォルトの名無しさん
垢版 |
2010/08/16(月) 12:26:57
最近じゃ相手に「歴史を語る資格はない」とか言い放つらしいぜ。
歴史の議論で。
2010/08/16(月) 12:31:23
「古屋」氏がいきなりホロコースト云々を言ってたけど、その前の経緯がカットされていたそうな。
韓国に都合の悪いとこをカットすんな、狗HK!

>2010-08-14 NHK総合「日本のこれから、共に語ろう日韓の未来」出演
★補足★編集でカットされた部分

6.僕の発言に関連する部分

⇒韓国人出演者の一人が、ドイツ人はユダヤ人に対するホロコーストに対し謝罪と補償をしているから日本もするべきみたいなニュアンスのことを発言したので僕がそれを否定する発言に続く。(この前段階がカットされている)
http://d.hatena.ne.jp/aniotahosyu/20100814/1281792754


崔洋一はキチガイだよな
声がでかいだけで中身がないくせに
自分を棚にあげて相手を罵倒する最低の人間
2010/08/16(月) 13:18:12
あれって収録なのか
まあ生じゃできないよな
2010/08/17(火) 08:36:13
日本人ってホロコーストに類するような事何かしたっけ
南京は真偽不明だしそもそも下朝鮮関係ないし
2010/08/17(火) 08:46:19
    古屋さんはなにも間違ったこと言ってないですよ。
    すずめ監督は、植民地のこと言われて火病ったのではなく、
    テレビも新聞も政治家も歴史家も触れられなかった最大のタブー、

    「朝鮮人は日本人として、日本軍にたくさんいた。つまり戦争の加害者」

    と反論できない事実を暴露されたから、取り乱したんですよ。
    この事実で朝鮮人の言い分の前提が瓦解するから。
    怒鳴りながら、話をそらして資格がないで封殺したつもりが墓穴。
2010/08/17(火) 14:47:01
うわぁ
2010/08/18(水) 00:29:47
このスレって、Cの話? C++の話?
で、Stringってオブジェクト? C++の。
2010/08/18(水) 09:19:50
なんでCとC++に限定するんだよ
お前がそれしか知らないからか
126デフォルトの名無しさん
垢版 |
2010/08/18(水) 19:32:22
>>124
javaの話です
C、C++はすれちがい
2010/08/19(木) 03:26:34
Javaの話にしてはInteger.toString(int)とかString.valueOf(int)が全く出ていない
2010/08/19(木) 06:45:20
parseInt
2010/08/20(金) 22:25:49
文字列が等しいかの比較が、 ==(または=)でできない言語は糞
2010/08/20(金) 22:32:58
文字列ならパターンマッチもできない比較演算子は用意しても無意味
2010/08/21(土) 21:40:46
最初の論旨から外れすぎだな

というかスレタイの意味が理解できてない奴が多い
2010/08/21(土) 21:53:18
「?」だけの>>1で「最初の論旨」もクソもあるか
言語すら書いてないだろw
2010/08/21(土) 22:18:13
Cでも、一応文法違反ではないな。
2010/08/28(土) 04:29:42
俺は電卓の感覚で 1 + 0.5 って叩いた時 1.5 にならない方がイラッと来るし
"3" * 5 がエラーになったら「えー、なんで"33333"にならねーの?めんどくせーなー」って勢いなんだけど
どんな用途向けなのか、よりまず言語としての厳密さを求めるってのは、
やっぱ人の価値観てのは違うんだねぇ
2010/08/28(土) 05:21:56
$ irb
irb(main):001:0> 1 + 0.5
=> 1.5
irb(main):002:0> '3' * 5
=> "33333"
irb(main):003:0>

$ python
>>> 1 + 0.5
1.5
>>> '3' * 5
'33333'
>>> ^Z
2010/08/28(土) 05:46:01
$ awk 'BEGIN {print 1 + .5; print '3' * 5;}'
1.5
15
2010/08/28(土) 05:47:24
$ awk 'BEGIN {print 1 + 1.5; print "3" * 5;}'
1.5
15
2010/08/28(土) 05:48:01
$ awk 'BEGIN {print 5 * '3';}'
15

sugeeeee
2010/08/28(土) 06:26:28
$ awk 'BEGIN {print " " * 5;}'
0
awkには文字列演算がないから、演算子があれば対象は必ず数値として扱われる。

$ awk 'BEGIN {print 3 5;}'
35
文字列の連結は単にオブジェクトを並べるだけ。
2010/08/28(土) 11:28:45
戻り値の型はデータが決めるんじゃなく、演算子が決めるって言語は結構あるね
2010/08/28(土) 12:15:37
Matz は int / int (5 / 2) の型を有理数型にしたいそうな
2010/08/28(土) 15:34:41
>>141
あー、それ一度は誰もが考えるよね。
2010/08/28(土) 16:51:21
>>135 こっちが自然で
>>136 こっちが不自然って言うか、融通が利かないなって思う

やっぱ人によって違うねぇ・・・
2010/08/28(土) 16:52:30
あ、正確には>>136でなく>>136-139
2010/08/28(土) 16:58:56
>>142
というかLispの真似だろう
2010/08/28(土) 17:07:17
有理数型は、誰でも考える。
2010/08/28(土) 21:41:36
LISPはそれをいち早く実現しちゃった(///
2010/08/28(土) 21:46:34
有理数型はすごそうに聞こえるが、浮動小数点より実装が簡単な気がする。
2010/08/28(土) 21:47:19
Lispは先進的過ぎた言語だと思う
組み込みリスト型、イテレータ、ガベコレ、関数型…
この辺ほぼLispが初出じゃね?
2010/08/28(土) 22:49:27
>>148
x = 1 / 3;
y = x * 3;
で y が 1 になってくれるとうれしいよね
2010/08/28(土) 23:10:19
言わんとすることは分かるけど、その式は別に倍精度でもそうなるべ?
2010/08/29(日) 02:24:41
ナランヘヨ?
2010/08/29(日) 10:25:44
rubyのソースにRationalのソースが入ってる。
想像通りのカンタンな実装だからパクれよお前ら。
俺もJavaでRational実装して使ってる。クソ便利。
2010/08/29(日) 12:21:51
最終的な結果を分数の形で欲しいのでなければいらんと思うけど。
まあ、そんな場面はほとんどないわけで、活躍の場は非常に限定されそうだな。

何より今時ソフトで実装された数値表現なんてw
2010/08/29(日) 13:04:34
>>154
いや、誤差が累積するのが問題になったりするから、
結果がどうでも有用だろ。
2010/08/29(日) 13:24:04
VBでやらないことはいらない!みたいな言い草だなw
2010/08/29(日) 13:31:18
>>155
そう来るだろうと思ったけど、誤差がないことを要求される場面(普通そうはない)
以外は問題ない。

多くの場合重要なのは必用な桁数の有効数字が得られるかどうかであって、
それは実数型で普通に可能。

その有理数型の「誤差がない」というメリットにしても、
演算仮定に無理数が入った途端に破綻することは理解してるのかな?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況