JAVAってこんなことも出来ないの?

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2007/05/19(土) 22:13:03
mainメソッドから値を返す。
2011/06/16(木) 19:33:34.56
if(x==0) を if(x=0) なんていう書き間違いを防ぐためと、
その書き間違いを防ぐためにif(0==x)なんていう
直感的に分かりにくいコードを書くバカが現れることを防ぐために、
キャストできない方がいい。

>>329 え?
2011/06/16(木) 19:40:08.47
>>330
あによ?

ifもforも命令一個なら{}省略出来るだろうがよ

自分もキャストは出来ない方が良いと思うぞ?
必要なら関数なりメソッドなりですれば良い
2011/06/16(木) 21:36:17.74
C だと非 0 が真
2011/06/17(金) 00:45:45.31
intだとif(x)とかif(!x)が出来ないのが面倒。ついでにオブジェクトにも出来ないのもダメ。いちいちx==nullとかx!=nullとか面倒。
2011/06/17(金) 01:03:04.57
あえて記述が面倒なのを受け入れて間違いを防ぐのがJavaのいいところだと思うのだが
2011/06/17(金) 01:18:26.39
一からjavaで書く分にはそれでいいかもしれないけどc++からの移植とかする場合いちいち手直ししてあげないといけないのは超面倒
2011/06/17(金) 01:29:09.45
>>335
え、それは・・・
普通、リファクタリングしない?
2011/06/17(金) 06:34:51.84
間違いを防ぐんではなく、真偽の論理値が必要な場所に
数値が現れるのが意味的におかしいんだよ
2011/06/17(金) 07:50:40.62
符号つきなのにbyte型なんて名前なのが腹立つ。
2011/06/17(金) 08:32:39.35
符号付の方が都合がいいだろ。
2バイト文字判定がフラグだけ見て判断できるんだから。
2011/06/17(金) 09:49:44.67
符号無し整数型の充実を求む
2011/06/17(金) 10:25:37.47
>>340
C#使え
2011/06/17(金) 10:56:06.73
>>341
まわりのね、えらいひとたちがね、
じゃばをつかえって、いじわるするの
2011/06/17(金) 11:55:31.19
>>342
引きこもって飢え死にしろ
2011/06/17(金) 21:00:38.86
結論 JAVA はゴミ
2011/06/17(金) 22:53:57.06
>>340
確かにそれは思う時はある。
だけど、そういうちょっとした便利さとかを求めて言語仕様変えようとすると
Java7,8みたいにグダグダになってしまうんだと思うんだ。
2011/06/17(金) 23:10:14.38
ヒアドキュメント
2011/06/18(土) 00:51:34.61
>>345
単に不便っていうよりは、言語設計上のミス (或いは、
必要性を認識出来なかった) だと思ってる

配列の型変換にしても、ポインタを使える様にしろとは言わないけど、
代わりにビュー的な仕掛け (byte 型配列を int 型配列として参照する等) とかなら
処理系の実装次第でどうとでもなりそうだし
2011/06/18(土) 08:29:05.44
int sjisCode = (b1 & 0xFF) << 8 | (b2 & 0xFF);
符号付きは不便だな。
2011/06/18(土) 17:38:29.14
油断して (b >> 4) とかやると、とんでもない数になったり
(b >> 4) & 0x0f の & 0x0f がまんどくせ

>>329
return n>0;
2011/06/19(日) 04:17:49.31
byte b = (byte)((bOrg & 0xFF) >> 4);
糞としか言いようがない
2011/06/19(日) 15:16:48.20
これまでの人生で、符号付き8ビット整数を使うような場面に一度も遭遇したことがないけど
実際、具体的にどのような事に使用されてるのでしょうか
たとえ話じゃなくて、具体的なアプリケーション名とか、規格とか、そんなので何かありますか?

たとえば音楽のMIDI規格では、左右のチャンネルの振り分けデータは
  左〜中央〜右
  0 〜 64 〜 127
のように真ん中が64になるようゲタを履かして、負の数を扱わずに済むようにしてあります。
8ビット符号付整数って、ものすご〜〜〜〜〜く扱いづらいんですよ。
2011/06/19(日) 19:10:44.48
そうだな。例えばGIF画像を処理するプログラムで使ったな。
数あるバイナリーフォーマットの中でMIDIだけは符号付き整数を基本とする
異例のフォーマット。
そんなマイナーな例を持ち出してJavaを擁護するのは恣意的だぞ
2011/06/19(日) 19:13:46.84
??
2011/06/20(月) 07:57:32.52
俺も符号付き嫌
慣れないうちはバグの温床になりやすくて嫌いだわ
javaはバイナリを扱うのには向いてないって思う
2011/06/22(水) 15:01:07.27
Java にしても .NET 系にしてもバイナリファイルの扱いを事実上放棄してるよなぁ
2011/06/22(水) 18:17:37.91
>>355
え、.netはちゃんと符号なしは有るぞ?
2011/06/22(水) 23:45:33.67
>>356
確かに符号無し整数型はあるけど、次の様なことを C#、VB 等で行おうとすると、結構メンドくありませんか?

1) C の構造体の様な任意のサイズ・構造のブロック単位での入出力
--> バイナリファイルを扱う時に必要

2) バイト配列の任意の位置・サイズを別の型の配列として切り出す
--> メモリマップしたファイル、バイナリデータを用いるプロトコルスタック等で必要

無い物ねだりしても仕方ないんですけど…
358uy
垢版 |
2011/06/23(木) 02:50:56.35
C#ではそういうやり方でやるなって事だろ
ゆっくりもたもたしたコードで処理を行う
コードの短縮を行う為のポインタ演算は、レベル4くらいの能力者じゃないと読めないし
レベル5の技術者じゃないとかけない
C#は土方用言語ゆえ、難しいことはやらない
2011/06/23(木) 17:03:48.38
>>358
rubyも土方用だからバイナリ扱うのには向いてないよね
2011/06/23(木) 18:54:58.57
どっちかっていうとC#よりCの方が土方用って感じがする。
ユーザ寄りじゃない部分を書くわけだし。
2011/06/23(木) 19:52:14.99
>>360
えー。。。。?
自分はC#でアプリしか作れない人よりも、Cでデバイスドライバ書ける人の方が尊敬するけどなぁ。。。

2011/06/23(木) 20:10:44.77
C#の初心者とCの中級者を比べてもしゃーない
2011/06/24(金) 00:41:49.93
c#はちょっとしたアプリ作ったり、ツール用がほとんどじゃね?
2011/06/24(金) 03:17:50.05
>>363
とか言う奴に限って、C#使わせてもJavaみたいなコードしか書けないというw
2011/06/24(金) 03:19:36.86
>>361
デバイスドライバとかなにが楽しいの?
そういうのは他人に任せてればいい汚れ作業
まさに土方
2011/06/24(金) 07:52:38.35
Javaって、Javaスレで話題の中心になることもできないの?
2011/06/24(金) 09:38:23.95
>>365
デバイスドライバがなきゃ、その上のソフトが動かないわけだが
ドライバの出来が悪けりゃその上のソフトがいくら頑張ってもよくならないし

土方のとらえかただな
俺なんか土方の仕事っていったら与えられた言語で与えられた仕様書通りにソースを書く仕事って捉えてるが
2011/06/24(金) 12:28:41.31
>>365
楽しいから書くとか、仕事舐めてんの?
2011/06/24(金) 18:20:19.16
ビットローテートも一発でできないなんて
2011/06/24(金) 21:36:55.33
>>365
ハード叩くって面白いよ
2011/06/24(金) 22:35:48.69
>>369
java.lang.Integer#rotateLeft(int, int)
2011/06/25(土) 06:46:22.97
まだハード寄りの方が偉いって勘違いしてる奴がいるのか
2011/06/25(土) 09:00:47.89
できない事への憧れって奴なんじゃね?

実際には>>367の土方仕事だったりするけどな。
2011/06/25(土) 17:24:37.54
デバイスドライバー開発はまちがいなくドカタ。
SEから見れば>>367もドカタ。
2011/06/25(土) 21:31:56.05
>>374
それを言ったら、プログラマは全員土方だな

世界では違うらしいけど、日本じゃあながち間違ってないってのも悲しいが
376デフォルトの名無しさん
垢版 |
2011/06/25(土) 21:46:06.50
わざわざこんなスレ立てるとか、javaにコンプレックスでもあるのか?
2011/06/25(土) 22:26:21.20
4年前の事に文句を言われても…
2011/06/25(土) 22:59:27.90
コンプレックスじゃなくて、出来の悪い言語に頭きてるだけだろ。
でもプロセスがOSに対してステータスを返すのは通常のメソッド呼び出しとは
異なる特別なことなんだから、mainの戻り値がプロセスの戻り値になるCの方が異常
2011/06/25(土) 23:27:57.49
mainが自動的に呼ばれるのも異常ってことだな
2011/06/25(土) 23:35:44.77
なんでそうなるよ。エントリーポイントはメソッドしか実現不可能じゃん。

プロセスが終了ステータス返すってことは、全スレッドを止めてJava VMの
シャットダウンが必要なんだから、System.exit()の方が自然。
mainが0を返したあとで他スレッドが生きててエラーになったのに
プロセスとしては0が返るとかキモ杉だろ
2011/06/26(日) 00:40:36.33
main 終了後の cleanup で terminate する様に実装するとかじゃダメ?

で、スレッド複数上げてる場合、プログラマが責任持って join または purge することを義務付けるとか…
2011/06/26(日) 00:51:54.47
まともなデストラクタ書かせろよ
2011/06/26(日) 01:15:40.02
JavaはCと違って、メインが終了してもサブスレッドがすべて終了するまでプロセスが終わらない。
Thread.setDaemon()である程度制御はできるし、Cと同じにしたければ
mainの最後でSystem.exit()すりゃいいだけ。
そういう言語設計思想なんだからメイン終了時にjoinしろという指摘は不適切。

ちなみにこの仕様はJavaだけでなく.NET Frameworkにも受け継がれている
2011/06/26(日) 02:26:09.92
>>383
いやいや、前段で書いてる通り、main 終了後に
問答無用で terminate することを前提に、
それが嫌なら join しろと言ってるだけ
全ては仮定の話です
2011/06/26(日) 11:06:40.52
>>380
なんでそんな糞プログラム書いてるの?
2011/06/26(日) 22:33:05.08
process terminate signal みたいなのを拾えたらいいのにね
2011/06/27(月) 02:52:59.16
仮想マシンとアプリの間の OS 相当部分をもっと厚くしないと、こういったことって難しいんだろうな
2011/06/28(火) 20:41:38.58
JavaはIPv6で非同期TCP通信できない
2011/06/28(火) 22:50:18.07
java.nio って IPv6 未対応なの?
2011/06/29(水) 07:16:22.19
Java 7なら・・・
2011/06/29(水) 12:45:25.07
JAVAじゃデバイスドライバなんてかけないから、こんなスレで話題振らないほうがwwwwwwwwwwwwwwwwwwwwww
2011/06/29(水) 13:35:46.33
割り込み禁止もできないなんて
2011/07/02(土) 16:55:22.17

お前らってどうみてもゴミだよな?
ゴミグラマって気持ち悪いんだな
2011/07/02(土) 22:17:09.09
いえいえ、お天使様にはかないませんよ
2011/07/04(月) 23:29:44.04
参照渡し
それとまともなジェネリック
(値型のジェネリックを使うとボックス化&非ボックス化が
暗黙のうちに発生して速度が遅い件)

参照渡しもできない癖に「ぬるぽ」が発生する矛盾
(そもそもポインタがないことを自慢してたのは、どの言語だ?)
2011/07/05(火) 00:26:27.90
>>395
ガッ
2011/07/05(火) 01:39:52.76
>>396
俺、>>395だが、
このこと(参照渡しもでそもそもポインタがないことを自慢してた)
には触れてはいけなかったかな?
それとも、2chのお決まりに従って「ガッ 」してくれたのかな?
でも、俺と同じように疑問に思う人はいないのかな?
2011/07/05(火) 01:55:33.14
>>397
普通に考えりゃ脊椎反射だw
2011/07/05(火) 07:53:49.23
>>397
名前欄嫁
2011/07/06(水) 20:02:31.08
>>398
>>399

>>397です。不注意でしら。すみません。

でも、俺、普段から思ってるんだけど、JAVAってポインタに類するものは
危険だからって、参照渡しまで禁止しておいて、NullPointerExceptionが
発生するような言語のどこが、主義に一貫性があって、言語に整合性が
取れてて美しい言語なのか・・・・理解できない。
それに、値型でも参照型でもいいけど、引数の参照渡しが危険で、
参照型の値渡しが安全っていうのも理解できない。
(引数渡しの中で一番危険なのが、参照型の値渡しだと思うが・・・。)
誰か、JAVAのどこに一貫性があって、整合性が取れてて、美しい言語なのか
説明してください。
結論は、JAVAでできないこと=JAVA(言語)の設計思想の一貫性について
納得のいくような説明をすること。
長文ですみません。
2011/07/06(水) 20:04:08.63
JAVAでできないこと。
ボタンなどのイベントハンドラを柔軟に簡潔に記述すること。
(匿名インナークラスでべた書きなどは論外)
2011/07/06(水) 22:17:42.28
>>400
「(C++の)ポインタを使った配列アクセス」が危険だから廃止
 →これは実際に効果あったんじゃない。パフォーマンスの若干の低下と引き換えにバッファオーバランはなくなった

「参照渡しと値渡しと値のポインタ渡し」が低能にはわかりにくいから一つに統一
 →参照渡しはなくてもよかったが値渡しとポインタ渡しは選べるようにしてほしかった
 →実際プリミティブ型とそれ以外では動作が違うわけだから、この点に関しては一貫性はないな

刃物みたいなC++を安全カミソリにしようとしたのがJavaであって、それは成功したといえると思う
2011/07/06(水) 22:57:30.53
そしてjavaで「これ、削り過ぎで不便」って所を入れてC#になる訳ね
2011/07/06(水) 23:02:57.38
>>402
あなたが言わんとしていることはなんとなくわかるが、でもJAVAの設計思想
はやっぱりおかしいと思う。
たとえば、あえてVB.NETを例に出すけど、参照渡し、値渡しはサポートし、
ポインタを使った配列アクセスは禁止してる。
で、(あくまでこの部分だけを取り上げると)JAVAとVB.NETを比べたとき、
どちらが(プログラム的に)安全で将来性があるかと考えると、
安全性ではほぼイコールで、将来性では、VB.NETに軍配があがると思う。
(たとえば、JAVAのGENERICとVB.NETのGENERICの実装を比較するとよくわかる
と思う。)
こんな不利があるのを承知の上でセールストークのためだけに引数の参照渡し
を禁止しておいて、NullPointerExceptionなんてエラーが発生する矛盾を作っ
てる言語の設計思想が理解できないわけで・・・。
ちなみに、VB.NETよりもやっぱりC丼のほうが言語仕様的には優れてると思う。
(参照渡しの場合、呼び出す側にも呼び出される側にも参照渡しを示すキーワード
が必要だというのは、いいと思う。)
まあ、ヘジとゴスの器の差というところだと思うけど。

後、自分の恥をさらすけど、
参照渡しと値のポインタ渡しの違いが理解できないんで、教えてもらえると
ありがたい。
個人的には、引数の種類と渡し方の違いで、
・値の値渡し
・値の参照渡し
・参照の値渡し
・参照の参照渡し
の4種類があると思ってるんだけど。
で、一番危険なのは、参照の値渡しだと思ってる。(動きが中途半端だから)
このなかでJAVAのように(安全な言語仕様にするために)2つ禁止するなら、
1.参照の値渡し
2.値の参照渡し
の順だと思うけど。
2011/07/06(水) 23:04:44.53
>>404です。
いまさらながら、長文すみません。
2011/07/06(水) 23:14:13.70
どちらかというと、危険なのは>>404だな。
2011/07/06(水) 23:35:31.62
>>404
>1.参照の値渡し
これを禁止されたらかなり痛いな。機能的には参照の参照渡しだけで問題ないが
2011/07/06(水) 23:45:12.42
痛いのは>>404だな。
2011/07/06(水) 23:45:17.60
>>406
すみません。以後、長文気をつけます。
>>407
俺、>>404だけど、禁止するべきとは思ってないです。
どうしても2つ禁止するならってことで・・・。
でも、参照の値渡しって、呼び出し先での参照の属性の変更は
呼び出し元に反映されて、参照そのものに対する変更は
呼び出し元に反映されないってのは中途半端な気はしませんか?
2011/07/06(水) 23:52:31.67
なんでメソッド一般に手持ちの変数を書き換える権利を与える必要があるんだよ
性悪説のPGが発狂しちゃうぞ
2011/07/06(水) 23:58:31.47
>>404
VB.NETやC#とJavaを比べたらだめでしょ。JavaはC++の時代に設計されたんだから

>参照渡しと値のポインタ渡しの違い
ポインタ渡しというはポインタの「値」渡しなので言語仕様的には値渡しになる

>・参照の参照渡し
値渡しと参照渡しは呼び出し時の引数をコピーするかしないかを意味しているのであって
変数が値型か参照型かというのはとは関係ない
参照型を参照渡ししたら呼び出し元のインスタンス
を変更できることになるが、
通常はインスタンスの中身を変更してもらいたいだけだろう
2011/07/07(木) 00:07:24.64
>>411
設計した時期が確かに5年ぐらいJavaが先だからC#とかはまねできる分有利
だね。でも、それが参照渡しを廃止してしまった言い訳には・・・。

>ポインタ渡しというはポインタの「値」渡しなので言語仕様的には値渡しになる
勉強になりました。ありがとう。
2011/07/07(木) 00:15:36.21
>それが参照渡しを廃止してしまった言い訳には・・・。
いや、値渡しと参照渡しが混在していたC++からきっぱりと値渡しだけにしたのは
安全カミソリ化として正当だと思う

でも使っているうちに「やっぱりout引数欲しいよね」ってことでC#では復活した
わけで、Javaは今となっては使えない言語だというのは同意するが、Javaの設計に
無理があったとは思わない
2011/07/07(木) 00:27:24.22
>>413
>Javaの設計に無理があったとは思わない
なるほど。そういう考え方もできるんだね。
俺は、1996年にJavaの本を読んでその仕様を知ったときから、セールス
トークのためだけの(間違った)言語設計だと思ってたので、
そういう考え方はできなかった。頭が固いのかもしれん。
2011/07/07(木) 01:26:41.45
参照の値渡しを禁止されたら、
実引数にnewが書けないね
2011/07/07(木) 01:42:24.12
>>415
なんで?
できると思うけど
2011/07/07(木) 01:44:24.85
>>415
>>416です。ごめん。よく考えたらできないね。
2011/07/07(木) 08:36:57.21
Javaにできないこと。
Windowsで動作する、大半の人が違和感を感じない
普通のWindowsアプリケーションを開発すること
2011/07/07(木) 09:44:19.19
見た目の問題ならSWT使えばいいんじゃね?
2011/07/07(木) 16:45:56.24
>>413
.NET上で動くVB後継製品出してC#と連携させようとすると必然的に参照渡し必要にならん?
2011/07/09(土) 13:50:38.97
>>419
見た目の問題ならC#使えば良い。敢えて劣ったJAVAを使う必要は無い。
クラスプラットフォームの要件があるところだけJAVAががんばれば良い。
2011/07/09(土) 16:28:30.99
Winというプラットフォームの存在を考えれば圧倒的にC#の方が優位そうにみえるが
実際に書かれたアプリの数はどんぐりの背比べ程度という
2011/07/15(金) 19:45:28.85
>>418
それC#.NETでもできないよね
2011/07/15(金) 19:54:19.44
C# .NETはもうサポート切れてるだろ
2011/07/20(水) 16:09:58.07
え?C#のマイクロソフト独自拡張をC#.NETっていうんじゃないの?
2011/07/20(水) 20:04:03.54
Microsoft Visual C# .NET
Microsoft Visual C# .NET 2003
Microsoft Visual C# 2005
Microsoft Visual C# 2008
Microsoft Visual C# 2010
2011/07/20(水) 21:16:31.57
.NET(Mono含む)以外で動くC#ってあったっけか?
2011/07/21(木) 22:38:35.08
>>426
え?それIDEの話でしょ?
2011/07/21(木) 23:43:23.86
>>428
>>426に言ってどうする。>>423に言え。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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