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

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2010/08/02(月) 23:30:13
2010/08/02(月) 23:39:52
2010/08/02(月) 23:48:10
2010/08/02(月) 23:49:08
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

                  京都大学霊長類研究所
2010/08/03(火) 00:39:11
( bb || !bb ) ?
2010/08/03(火) 01:16:04
えっ、ダメなの?
2010/08/03(火) 01:22:04
HSPディスってんじゃねーぞ
2010/08/03(火) 01:22:47
まあ、馬鹿の一つ覚えっていうか、羹に懲りて膾を吹く馬鹿って多いからさ実際。
2010/08/03(火) 05:13:56
Java って邪魔くさいね
まで読んだ
2010/08/03(火) 12:02:49
Javascriptでもちゃんと
var s = String( i );
って書くよ。
2010/08/03(火) 12:15:24
http://en.wikipedia.org/wiki/Type_system#Strong_and_weak_typing
2010/08/03(火) 13:45:44
型のゆるい言語ならそういうこともできるんだろうね
2010/08/03(火) 21:50:46
+で文字列結合っていう発想がイヤすぎる
そんなのBASICとかいう糞言語の仕様だろ
2010/08/03(火) 21:57:56
るby
2010/08/03(火) 23:18:36
perl 臭いな
型に対して無防備な言語は俺は嫌いだ。
2010/08/03(火) 23:26:27
Javaのくせに生意気だ
2010/08/04(水) 01:27:30
C++も+で文字列結合するよ。

+で文字列結合がいやなやつって
言語あまり知らないんじゃね?
2010/08/04(水) 02:25:45
BASIC なら & だろ。
2010/08/04(水) 02:46:07
こんなページがあった
http://d.hatena.ne.jp/katona/20071221/p3

文字列結合に+を使う言語は多い
2010/08/04(水) 04:43:42
+で結合は一見便利なんだけど
実際のところは""のせいで
長くなってくると非常に見辛い

a + ", " + b + ", " + c

みたいに書くよりも

"%s + %s + %s" % (a, b, c)
"{{a}} + {{b}} + {{c}}"
"#{a} + #{b} + #{c}"

とか書ける方がうれしい
2010/08/04(水) 07:09:08
>17
それはStringクラスの演算子オーバロードだから本来の + の効果ではない
22デフォルトの名無しさん
垢版 |
2010/08/04(水) 09:37:49
つまりどういうことです?
23デフォルトの名無しさん
垢版 |
2010/08/04(水) 10:51:33
c の char みたいにローレベル操作じゃないから
気にくわない。
2010/08/04(水) 10:52:51
ロベール操作だって?
2010/08/04(水) 11:51:46
なんで結合用の演算子を用意しないんだろう
Haskellみたいに++にするとかさ
2010/08/04(水) 13:12:35
PHPでは文字列結合演算子として . が定義されてるぞ。
2010/08/04(水) 22:28:36
>>21
内部実装がどうであれ、+で結合できることにはかわらんだろ。
C++標準ライブラリのSTLのstringの話だ。
2010/08/04(水) 22:31:11
>>20
そういうことが標準でできないのは、JavaScriptぐらいだよな。
2010/08/04(水) 22:34:20
>>25
++はインクリメントを思い出すからだめだな。
記号としてなら & が一番いいんじゃないか?

A と Bをあわせて(ry
A & B で(ry
2010/08/04(水) 23:51:26
>>28-29
VBは嫌い
2010/08/05(木) 00:06:10
お前の趣味なんか知らんがな。
2010/08/05(木) 06:03:05
ダッグタイピングは糞のように扱かわれていたのに、言語が変わったら神扱い。
2010/08/05(木) 12:02:57
これだから型に厳密でない言語はくそなんだよ
2010/08/05(木) 12:35:42
Javaだと実装不可能、
C++だとテンプレートを駆使しないと出来ないようなことが
阿呆みたいに簡単にできるからなぁ
2010/08/05(木) 14:13:40
>>32
今でもくそだと思ってるよ。
C#に導入されたけど、乱用されませんように。
2010/08/05(木) 14:25:49
スクリプト言語やCOMとの相互運用のためだろ
ラッパー自動生成なんかより遥かにスマート
2010/08/06(金) 00:27:31
>>34
> Javaだと実装不可能

何の話してるの?
文字列の結合?それならJavaでも+だけど。
2010/08/06(金) 01:05:35
>>20
その思考回路がわからない。
余計見難くなってるようにしか思えないけど....
っていうか、そういうのは普通にデリミタ挟んで文字列の配列を結合するメソッドを
作ろう(またはライブラリのそういうメソッドを使おう)よ

話飛ぶけど、ダックタイピングだの型が厳密でないだの、>>1の意図がマジで全然
理解できてない奴が何人かいるんだなw
2010/08/06(金) 01:13:05
>>20 の感覚のほうが一般的だろ。

C++とかJavaとか、結局formatみたいの導入されてるし。
2010/08/06(金) 01:48:07
JavaScriptにはformat見たいなものすらない。
2010/08/06(金) 01:49:10
俺には>>1の意図はよくわかる。

「?」しか書いていない>>1は馬鹿で〜すといいたいわけだ。
2010/08/06(金) 02:22:00
いやいや「勝手に数値と文字列の変換をしちゃうような言語きめぇ」って意見に
なぜって疑問を呈してる訳だろ? >>1は。

>>38は、ダックタイピングの話題がでてるけど、それって>>1の疑問と関係ないよね、
おまえらわかってんの?って言ってるわけでしょ。
2010/08/06(金) 02:36:42
>>39
>>38 の言ってることは一理ある

' + '.join([a, b, c])

って書けるとかなりスマートだ
2010/08/06(金) 02:39:53
>>40
ExtJS とか入れると Javascript で format 使えるようになって嬉しかったり
2010/08/06(金) 02:46:50
>>43
でも、それ規則的な連結にしか使えないでしょ。
2010/08/06(金) 03:54:26
>>42
たとえば n を 10 倍するときに

s = n * 10;

ではなく

s = n + "0";

って書いてしまう馬鹿が perler とか PHPer とか VBer に少なからず居る
2010/08/06(金) 11:07:05
俺はPHPで仕事してるけどそんな珍奇なソースみたことないぞ
2010/08/06(金) 18:24:25
Cの書式こそ至高だな
それを知らない、使い方が分からないバカが連結持ち上げてるんでしょ
2010/08/06(金) 18:29:11
c++ はどうして
cout << "x = '" << hex << h << "'" << endl;
どうしてこうなった?
50デフォルトの名無しさん
垢版 |
2010/08/06(金) 20:27:32
>>49
それ使いづらいから結局printf使ってる。
2010/08/06(金) 20:33:06
boost::formatは?
2010/08/06(金) 20:42:59
>>49
演算子オーバーロードとテンプレートを
使いたくて使いたくて仕方がなかったから。
2010/08/06(金) 21:47:45
iostreamは<<を使ってしまったのが失敗。
それでも、printf/scanfよりまし。
2010/08/06(金) 21:58:42
>>52
テンプレートは使ってないだろ。
2010/08/06(金) 22:44:04
???
2010/08/06(金) 23:09:00
テンプレートない時からあるから
2010/08/06(金) 23:53:02
>>53
kwsk

>>56
テンプレートは最初からあるぞ
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演算子か。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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