s = "" + i;でintをStringに変換するのはなぜだめか
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2010/08/02(月) 23:30:130002デフォルトの名無しさん
2010/08/02(月) 23:39:520003デフォルトの名無しさん
2010/08/02(月) 23:48:100004デフォルトの名無しさん
2010/08/02(月) 23:49:08言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
0005デフォルトの名無しさん
2010/08/03(火) 00:39:110006デフォルトの名無しさん
2010/08/03(火) 01:16:040007デフォルトの名無しさん
2010/08/03(火) 01:22:040008デフォルトの名無しさん
2010/08/03(火) 01:22:470009デフォルトの名無しさん
2010/08/03(火) 05:13:56まで読んだ
0010デフォルトの名無しさん
2010/08/03(火) 12:02:49var s = String( i );
って書くよ。
0011デフォルトの名無しさん
2010/08/03(火) 12:15:240012デフォルトの名無しさん
2010/08/03(火) 13:45:440013デフォルトの名無しさん
2010/08/03(火) 21:50:46そんなのBASICとかいう糞言語の仕様だろ
0014デフォルトの名無しさん
2010/08/03(火) 21:57:560015デフォルトの名無しさん
2010/08/03(火) 23:18:36型に対して無防備な言語は俺は嫌いだ。
0016デフォルトの名無しさん
2010/08/03(火) 23:26:270017デフォルトの名無しさん
2010/08/04(水) 01:27:30+で文字列結合がいやなやつって
言語あまり知らないんじゃね?
0018デフォルトの名無しさん
2010/08/04(水) 02:25:450019デフォルトの名無しさん
2010/08/04(水) 02:46:07http://d.hatena.ne.jp/katona/20071221/p3
文字列結合に+を使う言語は多い
0020デフォルトの名無しさん
2010/08/04(水) 04:43:42実際のところは""のせいで
長くなってくると非常に見辛い
a + ", " + b + ", " + c
みたいに書くよりも
"%s + %s + %s" % (a, b, c)
"{{a}} + {{b}} + {{c}}"
"#{a} + #{b} + #{c}"
とか書ける方がうれしい
0021デフォルトの名無しさん
2010/08/04(水) 07:09:08それはStringクラスの演算子オーバロードだから本来の + の効果ではない
0022デフォルトの名無しさん
2010/08/04(水) 09:37:490023デフォルトの名無しさん
2010/08/04(水) 10:51:33気にくわない。
0024デフォルトの名無しさん
2010/08/04(水) 10:52:510025デフォルトの名無しさん
2010/08/04(水) 11:51:46Haskellみたいに++にするとかさ
0026デフォルトの名無しさん
2010/08/04(水) 13:12:350027デフォルトの名無しさん
2010/08/04(水) 22:28:36内部実装がどうであれ、+で結合できることにはかわらんだろ。
C++標準ライブラリのSTLのstringの話だ。
0028デフォルトの名無しさん
2010/08/04(水) 22:31:11そういうことが標準でできないのは、JavaScriptぐらいだよな。
0029デフォルトの名無しさん
2010/08/04(水) 22:34:20++はインクリメントを思い出すからだめだな。
記号としてなら & が一番いいんじゃないか?
A と Bをあわせて(ry
A & B で(ry
0030デフォルトの名無しさん
2010/08/04(水) 23:51:26VBは嫌い
0031デフォルトの名無しさん
2010/08/05(木) 00:06:100032デフォルトの名無しさん
2010/08/05(木) 06:03:050033デフォルトの名無しさん
2010/08/05(木) 12:02:570034デフォルトの名無しさん
2010/08/05(木) 12:35:42C++だとテンプレートを駆使しないと出来ないようなことが
阿呆みたいに簡単にできるからなぁ
0035デフォルトの名無しさん
2010/08/05(木) 14:13:40今でもくそだと思ってるよ。
C#に導入されたけど、乱用されませんように。
0036デフォルトの名無しさん
2010/08/05(木) 14:25:49ラッパー自動生成なんかより遥かにスマート
0037デフォルトの名無しさん
2010/08/06(金) 00:27:31> Javaだと実装不可能
何の話してるの?
文字列の結合?それならJavaでも+だけど。
0038デフォルトの名無しさん
2010/08/06(金) 01:05:35その思考回路がわからない。
余計見難くなってるようにしか思えないけど....
っていうか、そういうのは普通にデリミタ挟んで文字列の配列を結合するメソッドを
作ろう(またはライブラリのそういうメソッドを使おう)よ
話飛ぶけど、ダックタイピングだの型が厳密でないだの、>>1の意図がマジで全然
理解できてない奴が何人かいるんだなw
0039デフォルトの名無しさん
2010/08/06(金) 01:13:05C++とかJavaとか、結局formatみたいの導入されてるし。
0040デフォルトの名無しさん
2010/08/06(金) 01:48:070041デフォルトの名無しさん
2010/08/06(金) 01:49:10「?」しか書いていない>>1は馬鹿で〜すといいたいわけだ。
0042デフォルトの名無しさん
2010/08/06(金) 02:22:00なぜって疑問を呈してる訳だろ? >>1は。
で>>38は、ダックタイピングの話題がでてるけど、それって>>1の疑問と関係ないよね、
おまえらわかってんの?って言ってるわけでしょ。
0043デフォルトの名無しさん
2010/08/06(金) 02:36:42>>38 の言ってることは一理ある
' + '.join([a, b, c])
って書けるとかなりスマートだ
0044デフォルトの名無しさん
2010/08/06(金) 02:39:53ExtJS とか入れると Javascript で format 使えるようになって嬉しかったり
0045デフォルトの名無しさん
2010/08/06(金) 02:46:50でも、それ規則的な連結にしか使えないでしょ。
0046デフォルトの名無しさん
2010/08/06(金) 03:54:26たとえば n を 10 倍するときに
s = n * 10;
ではなく
s = n + "0";
って書いてしまう馬鹿が perler とか PHPer とか VBer に少なからず居る
0047デフォルトの名無しさん
2010/08/06(金) 11:07:050048デフォルトの名無しさん
2010/08/06(金) 18:24:25それを知らない、使い方が分からないバカが連結持ち上げてるんでしょ
0049デフォルトの名無しさん
2010/08/06(金) 18:29:11cout << "x = '" << hex << h << "'" << endl;
どうしてこうなった?
0050デフォルトの名無しさん
2010/08/06(金) 20:27:32それ使いづらいから結局printf使ってる。
0051デフォルトの名無しさん
2010/08/06(金) 20:33:060052デフォルトの名無しさん
2010/08/06(金) 20:42:59演算子オーバーロードとテンプレートを
使いたくて使いたくて仕方がなかったから。
0053デフォルトの名無しさん
2010/08/06(金) 21:47:45それでも、printf/scanfよりまし。
0054デフォルトの名無しさん
2010/08/06(金) 21:58:42テンプレートは使ってないだろ。
0055デフォルトの名無しさん
2010/08/06(金) 22:44:040056デフォルトの名無しさん
2010/08/06(金) 23:09:000057デフォルトの名無しさん
2010/08/06(金) 23:53:02kwsk
>>56
テンプレートは最初からあるぞ
0058デフォルトの名無しさん
2010/08/06(金) 23:53:59boost::format はでかすぎなのと % がきもい
(s)printf と比べてメリットがそんなになさそう
0059デフォルトの名無しさん
2010/08/07(土) 00:11:46printf/scanfはそもそも安全でないので話にならない。
C++でテンプレートが導入されたのは比較的新しい。
0060デフォルトの名無しさん
2010/08/07(土) 01:03:32初期のC++にないもの。
・テンプレート
・例外
メモリの割り当てに失敗したら例外発生するんじゃなくて
NULL返すんだぜ。
0061デフォルトの名無しさん
2010/08/07(土) 08:02:440062デフォルトの名無しさん
2010/08/07(土) 08:27:560063デフォルトの名無しさん
2010/08/07(土) 13:59:34それって90年代の中頃にはすでにあっただろ。
無い時代のC++知ってるのって、そうとうおっさんだけなんじゃない。
0064デフォルトの名無しさん
2010/08/07(土) 14:19:27どっちにしても、テンプレートないころからiostreamはある。
0065デフォルトの名無しさん
2010/08/07(土) 14:51:090066デフォルトの名無しさん
2010/08/07(土) 14:53:390067デフォルトの名無しさん
2010/08/08(日) 08:28:44マクロとかvoid*使ってたんだぜ
0068デフォルトの名無しさん
2010/08/08(日) 08:51:410069デフォルトの名無しさん
2010/08/08(日) 12:30:040070デフォルトの名無しさん
2010/08/09(月) 11:30:06--
awk 'BEGIN {i = 10; j = 20; print i j;}'
--
これで 1020 と出力されるのだけど、裏を返せばTypoが怖いw
0071デフォルトの名無しさん
2010/08/09(月) 12:43:49C言語系書式のfor文と勘違いして混乱したじゃねーか
0072デフォルトの名無しさん
2010/08/09(月) 12:44:260073デフォルトの名無しさん
2010/08/09(月) 13:52:25Perlやawkは型の区別が無いが演算子は区別してる例
PythonやRubyは演算子は同じだが型付けが強く文字列と数値を自動的にcoerceしない
(>>1の例はエラーになる)
だな
この両者に比べると>>1式はひどいように思う
JavaScriptは文字列にcoerceするので、数値を""と足すと文字列化になるが
バッドノウハウ的だし意図せぬ誤りの元
が、もっとひどいのがPowerShell
1+"2" -> 3
"1"+2 -> "12"
こうなるんだぜ
0074デフォルトの名無しさん
2010/08/09(月) 15:21:13>>73が何も分かってないだけだろw
>>1の意図は明らかにそういう奴をおちょくることにあるんだが、
まあ、おちょくりの対象側の人間にとってはこの通り蛙の面にしょんべんだわな。
なにせ自分の無理解の自覚がないんだからw
0075デフォルトの名無しさん
2010/08/09(月) 15:45:230076デフォルトの名無しさん
2010/08/09(月) 19:50:13演算子の左辺の型によって演算子の挙動が変わるのか
いかにもバグの元になりそうな仕様だな
0077デフォルトの名無しさん
2010/08/09(月) 22:11:46やっぱりわかってないな。
0078デフォルトの名無しさん
2010/08/10(火) 00:27:47http://hibari.2ch.net/test/read.cgi/pcnews/1281355124/
0079デフォルトの名無しさん
2010/08/10(火) 01:34:120080デフォルトの名無しさん
2010/08/10(火) 06:35:220081デフォルトの名無しさん
2010/08/10(火) 07:40:16でもいい
0082デフォルトの名無しさん
2010/08/12(木) 08:27:151.+("2") -> 3
"1".+(2) -> "12"
うん、至って普通の動作だ
0083デフォルトの名無しさん
2010/08/12(木) 10:35:380084デフォルトの名無しさん
2010/08/12(木) 10:40:310085デフォルトの名無しさん
2010/08/12(木) 12:30:33これを見てもそう思う?
1 + 0.5 -> 1.5
0.5 + 1 -> 1.5
PowerShellでも
1 + 0.5 は1にはならない(勿論.NETなので、1と0.5の型は違う)
糞ほどのセンスも感じられない一貫性の無さだね
0086デフォルトの名無しさん
2010/08/12(木) 12:35:40もっと勉強しろ
0087デフォルトの名無しさん
2010/08/12(木) 12:59:51ちゃんとスレ読んでるか?
008885
2010/08/12(木) 13:04:52Int32 + String -> Int32
String + Int32 -> String
Int32 + Double -> Double
Double + Int32 -> Double
この仕様は君らにとってはOKなわけか、俺にはわからんわw
何でOKなのか教えてくれない?
0089デフォルトの名無しさん
2010/08/12(木) 13:07:41文句は Perl に言ってくれ
0090デフォルトの名無しさん
2010/08/12(木) 13:08:43関係ないじゃん
0091デフォルトの名無しさん
2010/08/12(木) 13:27:470092デフォルトの名無しさん
2010/08/12(木) 13:49:02実装都合なんて無意味じゃね?
これと違う仕様にも実装できるし、事実そうなっている言語はたくさんある
純粋に仕様として綺麗か汚いかって話だと思うんだが
0093デフォルトの名無しさん
2010/08/12(木) 14:22:39(Int32 + String -> Double)
単純に左オペランドの型に変換しているわけではない模様
"1" + .5 -> "10.5"
"1" + 10e2 -> "11000"
"1" + 10e100 -> "11E+101"
この辺はこうなる、予想の範囲だが
0094デフォルトの名無しさん
2010/08/12(木) 14:48:13夏 エラーと落球で逆転を許すとは末代までの恥
0095デフォルトの名無しさん
2010/08/12(木) 22:32:210096デフォルトの名無しさん
2010/08/13(金) 00:04:42書きなぐるコードじゃないなら型が厳しい方が好きだ。
0097デフォルトの名無しさん
2010/08/13(金) 18:02:29型厳しいとIDEも頭良くなれるし。
0098デフォルトの名無しさん
2010/08/13(金) 20:50:260099デフォルトの名無しさん
2010/08/13(金) 21:02:45むしろユルいのはお前さんの頭(以下略
>>85
よくある愚論だけど、別に(プログラミング言語の設計において)全てにおいて
一貫性が優先されるわけじゃない。
直感的であることと表面的な一貫性が矛盾する場合、どっちを優先すべきかは明らか。
数値同士の演算結果が前のオペランドの型になるような仕様が嬉しい奴はいない。
stringの+演算子が、片方のオペランドのToString()を呼び出すように定義されている
(C#の場合)のは、自然で直感的な仕様だ。
0100デフォルトの名無しさん
2010/08/13(金) 21:06:47"3" * 5 -> "33333"
これはどう思う?
0101デフォルトの名無しさん
2010/08/13(金) 21:30:40■ このスレッドは過去ログ倉庫に格納されています