プログラミング言語
■ このスレッドは過去ログ倉庫に格納されています
0001北米海外生活板使者
NGNG情報工学を学んでるAΩというコテハンがいます。この男Javaが
書けるようになるとCやC++を覚えるの楽だとか、Cの入門には
Javaがいいだとかちょっと?なことを発言しているのですが、
どう思います?リンクはっておきます。
http://teri.2ch.net/test/read.cgi?bbs=northa&key=980032074
0002名無しさん@お腹いっぱい。
NGNG0003デフォルトの名無しさん
NGNG0004デフォルトの名無しさん
NGNG0005デフォルトの名無しさん
NGNGと言うか、俺はC/C++やってから、
Javaやった。
つか、やらされた。
0006デフォルトの名無しさん
NGNG>>ちなみに当たり前すぎるが、プログラム系の板で、
>>Javaを勉強しておけばC/C++の覚えも早いなんて書いたら、
>>集中的にバカにされる(またはネタにされる)のは必至。
そう?
でもcで挫折してJavaをやってまたcをやるのがいいかな?
なんつったりして。
0007デフォルトの名無しさん
NGNG0008デフォルトの名無しさん
NGNG俺も北米板時々覗くから、そいつは知ってる。
何にでも口を挟んでくる暇人留学生ね。
でも特に興味なしってことで。
0009デフォルトの名無しさん
NGNG0010デフォルトの名無しさん
NGNGまぁ、煽りにいちいち反応する辺り厨房だけど
0011デフォルトの名無しさん
NGNGアメリカの大学じゃ最近はjavaから入るらしいじゃん。
言語のつまらない部分よりも、オブジェクト指向デザインとか
データ構造とかのプログラミングのエッセンスを教えるには言語は
シンプルな方がいいからね。
0012無党派さん
NGNG0013デフォルトの名無しさん
NGNG0014デフォルトの名無しさん
NGNGウソではないと思うよ。
0015デフォルトの名無しさん
NGNG0016デフォルトの名無しさん
NGNG0017名無しさん@1回転
NGNG0018デフォルトの名無しさん
NGNG例えばCのポインタみたいにおのおのの言語の特徴的な部分のこと。
言語は単なる表現手段でその下にあるコアの知識が重要ってことを
言いたかったわけです。
0019>1
NGNGングのスキルを身につけます。JavaとC++のどちらを使って学ぶべきでし
ょうか。
元のカキコ読んだけど、AΩの言っていることは理解できる。AΩ に
反論している奴は、特定の言語学習に拘った視野狭窄の傾向。学生の
目標は特定の言語の学習ではないだろう。
だいたい「CとC++」だの「C/C++」といった表記はコンパイラの表記
としては正しいが、学習の表記としては間違い。中身はかなり別物。
中途半端な「C/C++出来ます」プログラマが一番使えない。
002019
NGNGC -> C++ と学んだ学生よりも Java -> C++ を学んだ学生の方が、
絶対に筋がよさそう。その後の設計を学ぶ段階等を考慮しても。
ということで。私はファーストランゲージとしてCまたはC++を学ぶよ
りも、Javaを学ぶのに賛成です。
002118>>19
NGNGようですね。ちなみにCはもう省いてもよしって感じですね。
違うスレに書いてしました。
0022デフォルトの名無しさん
NGNGC/C++でいいんじゃないの?
それから、学校でJavaが導入されてるのかどうかはしらないけど、
もしそうなら、それは学習と言うより、実利的な理由だろ。
0023デフォルトの名無しさん
NGNGJavaがいいって意見には賛成だけど、リンク先でつっこまれている点
は、値呼び出しとか参照呼出しとかを理解していない人間がJavaが
わかればCとC++が楽にわかるとか、JavaがCの入門になるといった
意見をAΩがいってるからじゃないの?
0024デフォルトの名無しさん
NGNG19の言いたいことは分かるけどC/C++の表記にこだわるあたり
言葉尻を捕らえて遊ぶバッカー日本人の典型キティなので気にしない方がいいよ。
0025デフォルトの名無しさん
NGNGでもよ、
Cってのは、他の言語に比べて特別な存在だよ。
WinAPIもCベースで提供されているし、
UNIXに至っては、大部分がCでできてるよ。
だから、
他の言語の特徴的な部分は「つまらない」と言い得るかもしれないけど、
Cに関しては同じことはいえないと思うけど。
0026デフォルトの名無しさん
NGNGJavaの方がわかりやすそうだよな。
C++で入った俺としては何ともいえないけど。
ただ、プログラム初学者用には向いているとは思えないんだけど・・・
Cの方がわかりやすいよ。
シンプルだし。
0027デフォルトの名無しさん
NGNGC−>Java−>C++
順番はこれで良かったと思っている
データの基礎をしっかり学んで
オブジェクト指向の概要つかんで
応用
まあ、その前にアセンブラの経験がなきにしもあらずだったので
万人に当てはまるかどうかは不明
002818>>25
NGNGM$の方針はどうなのか知りませんが。
unixはソフトウェア発展のさまたげになってますね。
と言ってる私もCでjavaのネイティブ関数書いてマス。Cは万能アセンブラ
ってことですね。
0029デフォルトの名無しさん
NGNGいきなりオブジェクト指向を覚えさせるんですよね?
じゃなきゃJavaプログラムなんてほとんど出来ないし・・。
変数、配列、構造体とかの理解がそこそこで
オブジェクト指向が理解できるんか???
俺は無理だと思うぞ。
0030デフォルトの名無しさん
NGNG/) /)
/ ⌒ ヽ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ●_ ● | < >>29 理解できないのはおまえだけだよ
(〇 〜 〇 | \__________________
/ |
| |_/ |
0031デフォルトの名無しさん
NGNG0032デフォルトの名無しさん
NGNG0033デフォルトの名無しさん
NGNG0034デフォルトの名無しさん
NGNG「ゲームを作りたい」とかいう「初心者の素朴な願望」が叶えづら
い(難しいし,環境依存だし)ってのがあると思う。昔は BASIC で
手軽に出来たけど。
Java なら,BASIC ほど手軽ではないけど,絵を描いて,ピコピコ
ゲームを作って,ってなことは,初心者の目標として非現実では無
いと思う。
0035デフォルトの名無しさん
NGNG0036デフォルトの名無しさん
NGNGMacはpascalベースでAPI提供してるって知ってた?
俺は「これだからオモチャは!」と激怒したyo。
>>1
言語覚える順番なんて関係無いと思うけどね。
様は勤勉なプログラマか、厨房プログラマかだけ。
0037デフォルトの名無しさん
NGNGmacは悪いけど、
あんまりメジャーな存在ではないし…
0038デフォルトの名無しさん
NGNG0039デフォルトの名無しさん
NGNGむかし think c つこてたころは、pascal int some_entry(ptr a@` handle b);
なんて宣言があって仰天したけど。
0040デフォルトの名無しさん
NGNG縮小クラス
0041デフォルトの名無しさん
NGNGchar*は、キャーケツメドと読みまして、銭湯でケツメド丸出しのオヤジに
驚いた時に使います。
0042デフォルトの名無しさん
NGNGOS-Xはどうなのか知らないけど、その直前までは確認。
MacのHandle渡しは無駄なんでやめて欲しいッス。
あぁ、あとリソースもね。
っつーか、ピザ食べようぜ!(藁
0043AΩ@北米海外板
NGNG自己紹介はいいとして、ことの流れを軽く説明します。
今から一ヶ月以上も前に、コンピュータ専攻の学生のためのスレで
一人の人が、Call by reference とCall by value について質問をしました。
結局そのときは具体的な回答が出てこなかったので
答えは推測で出しました。
質問者はポインターについて理解していないようでしたので、
「ポインターが分からないなら、それも理解できないのでは?」みたいなことを書きました。
私もその言葉自体聞いたことがなく、自分の想像できることを書いたまでです。
「たぶんこうなんじゃない?」くらいで、意見の押し付けや
知ったかぶりなどの行動は一切ナシです。
そのときはこれだけで終わりました。
そして昨日あたりから、このスレを立てた人物が行動を始めました。
それは1のリンクで参照できると思います。
この人物に対する私の見解は、「肩がぶつかったぞ、ゴルァ!」
と言ってくるチンピラと対して変わりません。
Javaに関して述べたことも、他の人が言うならOKで
私が言うと否定するのですから、嫌がらせとしか思えません。
0044AΩ@北米海外板
NGNGここにこんな板を立てる始末。
しかも、「こいつ、こんなこと言ってますが、どう?」ときたもんだ。
北米板での威勢の良さはどこにいったのでしょうか?
ちょっとでも詳しい人がいる板では、この変わり様。
ここでも自分の意見を貫いて欲しかったのですが、無理なようです。
これで1の目的は理解できたと思います。
プログラムの知識のない人間を踊せ、私にけしかけるためです。
関係無い争いに巻き込んでしまい、1に変わって申し上げます。
「お騒がせしました」
0045デフォルトの名無しさん
NGNGここはプログラム技術板なので、プログラム技術についてカキコ
してね。板の雰囲気はすぐに変化する微妙なものだから。誰かと
誰かの人間関係に興味がある人はいません。
0046AΩ@北米海外板
NGNGCall by reference とCall by value の説明をしただいていただけると
大変感謝します。
1はしてくれなかったものですから。
0047AΩ@北米海外板
NGNG申し訳ありません。
これにて私は失礼します。
0048デフォルトの名無しさん
NGNGなかったら作っていい?
0049デフォルトの名無しさん
NGNGBASIC、Perlとかで始めると
プログラムの文法みたいな事が覚えられるから
良いと思う。
プログラム文法的な部分(分岐、ループとか)を
覚えるならJavaはわかりにくいと思う。
オブジェクト指向の方が良いプログラムで良いソフトか?って言うと
そうでもないでしょ?
となると、Javaから覚える必要性は、それ程無いのでは?
メモリの活用法覚えるならCの方が良いと思うし。
0050デフォルトの名無しさん
NGNGhttp://eg.nttpub.co.jp/news/20010124_03.html
初心者には良かろう。
0051デフォルトの名無しさん
NGNGどひゃー行番号だー。のすたるじー!買おっと。
0052デフォルトの名無しさん
NGNG厨房が買いそうだな。
まぁ実際は2Dシューティングが関の山だろうがな。
例え3Dゲームとを作れるソフトと動かす環境はあっても厨房にはつくれん。
それはそうと「ネットやろうぜ」(だっけ?)のPS2版ってないの?
それ欲しいんだけど・・・
0053デフォルトの名無しさん
NGNG俺はやったことないんだけど良質なゲームもちらほらあるから
関連サイト見てみるといいかもね。
Perl は正規表現使わないならまあそれなりにとっつきやすいかも。
便利なモジュールもあるし。
でもこれでゲーム作るとなるとOSごとに覚えることが出てくるしそっちのが面倒かも。
CGIでやるってんならそれはそれでいい。
005453
NGNGこっちのゲームはDirectXメインだったはず。
Winのゲームスレはプログラム板のほうだったかもしれない。
あとは過去ログあさっててはどうかね。
0055デフォルトの名無しさん
NGNGcall by value
オブジェクトの値が渡されること。
call by reference
オブジェクトの参照が渡されること。
ということではないのか?
他にどう説明したら良いんだ?
0056デフォルトの名無しさん
NGNGint func1(int b); // call by value
int func2(int *b); // call by reference
int func3(int &b); // call by reference
用は関数に渡した引数の値が関数の外に出た時に
値を変えられるかどうか。
#わかりにくい?
0057デフォルトの名無しさん
NGNGポインタを渡すのを、参照渡しの例として出すのは、良くないんじゃないか?
0058デフォルトの名無しさん
NGNG>int func2(int *b); // call by reference
こりゃcall by valueダロ。
0059デフォルトの名無しさん
NGNG>用は関数に渡した引数の値が関数の外に出た時に
>値を変えられるかどうか。
つーか、この結論も間違ってるだろ。そんなこと、
Call by ValueとCall by Referenceとは本質的な
関係はないぞ。
0060AΩ@北米海外板
NGNG私が当時に説明していたのが、間違っていなくて安心しました。
皆さんの大人な対応に大変感謝いたします。
0061デフォルトの名無しさん
NGNGint func2(int *b); // call by value@` アドレスがポイントされる。
int func3(int &b); // call by reference@` アドレスを直接参照する。
間違ってますか?
0062デフォルトの名無しさん
NGNGC言語の中では、実質的に参照渡しのようなものとして使用されているよ。
006356
NGNGそうも思ったんだけど、ポインタは紛れも無くcall by referenceなので。。
58>こりゃcall by valueダロ。
・・・
59>そんなこと、Call by ValueとCall by Referenceとは本質的な関係はないぞ。
本質を説明して下さい。(まぁ、本質というか哲学的な話になると思いますが。。)
実質的には56の説明で事足りる話です。
006456
NGNGK&Rを見て調べました。本当にすまんです。。
006556
NGNGごめんなさい。アヤマッテンダロ
0066デフォルトの名無しさん
NGNGvoid func1(int b){ b = 3; }
void func2(int *b){ b = 3; }
void func3(int *b){ *b = 3; }
void func4(int &b){ b = 3; }
int main(void){
int a = 1;
func1(a); // A
func2(a); // B
func2(&a); // C
func3(a); // D
func3(&a); // E
func4(a); // F
}
この中でmain::aが3になるのは[A-F]どれでしょう?
また、処理が未定義の呼び出し[A-F]はどれでしょう?
0067デフォルトの名無しさん
NGNGcall by referenceって
アドレス渡して
ポインタで受けることじゃないの?
0068デフォルトの名無しさん
NGNG0069デフォルトの名無しさん
NGNG「参照」を渡せばなんでも call by reference なんであって、
べつに変数名の文字列を渡しても call by reference だ。
まあ広義の「ポインタ」だな (C の意味じゃなくて)。
あるデータを送るのにそのものを直接送るか、web にアップロードして URL を送るか、という違いだな。
0070デフォルトの名無しさん
NGNGなのか?
0071デフォルトの名無しさん
NGNG勘違いしてんの多いんだな。56はわかったようだけど。
0072デフォルトの名無しさん
NGNG別に多くはないだろ。
0073デフォルトの名無しさん
NGNGだからさあ、実質的にはそのようなものとして使用されているって。
0074デフォルトの名無しさん
NGNG0075デフォルトの名無しさん
NGNGあまり意味のある突っ込みとは言えないって事を言いたいわけよ。
0076デフォルトの名無しさん
NGNG参照渡しは束縛を渡す。∴calledはcallerのスコープにある束縛を変更すること*も*できる。
値渡しは値を渡す。∴calledはcallerのスコープにある束縛を変更することはできない。
Cには言語仕様として参照渡しはないので、変数へのポインタを渡すことで
参照渡しの代用にすることがある。
ゆえに、int func2(int *b);は、
シンタックス上はcall by referenceではない。
セマンティクス上はcall by referenceとみなすことがある。
C++でも慣習として使う人が結構いる。
こんなところでどうかね。
0077デフォルトの名無しさん
NGNG異議無し
0078いつでもどこでも名無しさん
NGNGそれに callerに対しては calleeだよ。
でも変数名を渡すのは call by textだとおもうけどねえ。
変数ができた環境まで一緒に渡せば call by nameかな。
Algolの本を読もう(藁
0079デフォルトの名無しさん
NGNG余計な心配だったかな? スマソ
0080デフォルトの名無しさん
NGNG0081おっ
NGNG0082デフォルトの名無しさん
NGNGbinding
0083デフォルトの名無しさん
NGNG「束縛」の意味の使われ方が変だ。
0084デフォルトの名無しさん
NGNG0085デフォルトの名無しさん
NGNGポインタの話は決着したようだが
これを読んで、ソースの組かた変わる人(ここに参加した人)がいるだろうか?
いなかったらただの自己満足では?
0086デフォルトの名無しさん
NGNGfoo(int*);にしないと、呼び出し側の字面で
渡した値が変更されるかどうかわからない、っていう意見がある。
これには一理あると思うんだけど、個人的にはそれよりも、配列が欲しいんだか
もっとグローバルな感じのポインタ(アドレスって感じの)が欲しいんだか
参照渡しを意図してるのかわかんなくて困る、ってことの方が大きいような気がするんだが。
関数作った人の意図がわかりづらい、っていうか。
0087デフォルトの名無しさん
NGNGソースの組み方が変わるか変わらないかは置いておいて、
違いと特徴を理解することで、この3パターンにそれぞれ
どういうアドバンテージとディスアドバンテージがあって、
どういう状況でそれぞれの方法を使うのがいいのかを認識
することはできると思う。
0088デフォルトの名無しさん
NGNG0089デフォルトの名無しさん
NGNGメリットより混乱のほうが大きい。とくに、他人が読む場合。
0090デフォルトの名無しさん
NGNG>渡した値が変更されるかどうかわからない、っていう意見がある。
0.5理ていどはあるが、せいぜいそこまでだあね。
PASCAL屋がそれで困ったって話は聞かないもんね。
009158
NGNG>ポインタの話は決着したようだが
>これを読んで、ソースの組かた変わる人(ここに参加した人)がいるだろうか?
>いなかったらただの自己満足では?
ほっといたら、56が正しいって思う奴が出て来るだろ?
56を読んで、それ以降の議論を読んでない奴もいるだろうし。
俺は、この件に関しては、重隅だとは思わん。
0092デフォルトの名無しさん
NGNG>foo(int*);にしないと、呼び出し側の字面で
>渡した値が変更されるかどうかわからない、っていう意見がある。
関数宣言見ろ!
配列を渡されたら字面ではわからない。
0093デフォルトの名無しさん
NGNG56の書きこみが正しいと勘違いした奴。それがAΩ(藁
まとめておこう。
「さるでもわかる:値呼び出しvs参照呼出しvs値呼び出し(ポインタ編)」
1:値呼び出し
値呼び出しの場合は変数のコピーを関数に渡しているわけだから、
関数内での変数の変更が直接元の変数に影響が出ることがなく安全。
ただその反面、関数に変数のコピーを渡すわけだから、でかい
データを渡そうとする場合は処理速度にひびく。
2.参照呼出し
参照呼出しの場合は関数内で直接もとの変数を変更することができる
ので、でかいデータをいじる時でも効率がいい。ただし、その反面
このことは安全性の点で混乱を招く可能性が非常に高い。
3.値呼び出し(ポインタ編)
ポインタはその点値呼び出しと参照呼出しのアドバンテージを両方兼ね
備えているような存在。値呼び出しだけど役割的には参照呼出しを
シミュレートしてるので、変数を「直接」変更しない安全性と性能の面
が利点。ただ、値呼び出しと参照呼出しの場合と比べて(特にプログラマ
初心者なんかには)直感的に理解しにくい。
0094デフォルトの名無しさん
NGNG> 変数を「直接」変更しない安全性と性能の面が利点。
安全性(変数の変更が何処まで影響を及ぼすか)については
値呼び出し > 参照呼び出し > ポインタ じゃないか?
参照呼び出しの場合、呼び出し側と呼び出し元しか影響を及ぼさないが、
ポインタの場合、ポインタ演算を併用すると全域に影響を及ぼせる
009593
NGNGそうつっこみを予想して「直接」という言葉を敢えて
使ったんだけどな。結果的にはいじることになるん
だけどさ。
0096デフォルトの名無しさん
NGNGたとえば参照呼び出しをさらに参照呼び出ししていくならば、ポインタ渡しと全く同じ。
参照呼び出しとポインタで異なるのは、ポインタはNULLが渡せる。
参照呼び出しはかならず変数の実体(オブジェクト)が必要になる。
0097デフォルトの名無しさん
NGNGvoid Hoge(const string& str);
これなら値は変更されないなって分かるじゃない。
009893
NGNG>ポインタはNULLが渡せる。
安全性うんぬんを削除。あとは参照変数は一度
定義したら他の変数で実質上再定義しきれないけど、
ポインタならそれが可能ってところか。
0099デフォルトの名無しさん
NGNG>参照呼び出しとポインタで異なるのは、ポインタはNULLが渡せる。
追加、参照渡しはポインタ演算ができない。
また、参照渡し、ポインタ両方ともconst修飾により、
オブジェクトの変更を禁止させる事ことができ、
値渡しと同等の安全性を得る事ができる。
0100デフォルトの名無しさん
NGNG0101デフォルトの名無しさん
NGNG俺はよく使ってるぞ。これならパフォーマンスもいい。
誰も使ってないとしたらわりと疑問だな。
ついでに、必要もないのに非constポインタを要求するAPI逝ってよし。
0102>97
NGNG関数宣言を見るならば&がついてる時点で書き換えの可能性は考慮するでしょ。
0103デフォルトの名無しさん
NGNGmy_strcpy(a@`b);
結局関数宣言を見ないとわからん。
それとも
my_strcpy(&a[0]@`b);
わざわざこうしてるのか?
0104デフォルトの名無しさん
NGNG0105デフォルトの名無しさん
NGNG>ついでに、必要もないのに非constポインタを要求するAPI逝ってよし。
激しく同意。MS最悪。
>>102
>そうじゃなくて「それを呼び出す側のソースを見ただけでは」の話をしてたんだよ。
呼び出し側のソース見ただけじゃ分からないのは当たり前だ。
ナニイッチャッテンノ?
0106デフォルトの名無しさん
NGNGちょっと背伸びしちゃったね。
もっとガンバロウね!
0107デフォルトの名無しさん
NGNG自分よりできが悪そうなの一生懸命探してたたくのって楽しい?
0108106>107
NGNG0109デフォルトの名無しさん
NGNGだったらもう少しよく読まないと
かえって自分が恥じ書くよ
0110>103
NGNG書いてると思うのだが‥
0111デフォルトの名無しさん
NGNG値渡しとインターフェースが一緒です。
011285
NGNGいやー、思ったとおりの展開になってしまったよ
56を引き合いに出されるとなんとも言いにくい部分があるんだが
Cの言語仕様はそれでいいんだが、
93みたく勘違いしている連中のいるところで
言い合ってても無駄だなーと思ったわけです
それに、コンパイラとおった時点で実行速度とかの議論はできないんで
93の2でいわれているような場合にも最適化によって
差がでない場合もあるわけで
(C言語仕様のシンタックスの話よりも)そこらへんの話を含めた話で無いと
ポインタ談義の意味が無いと思ったわけです
0113デフォルトの名無しさん
NGNG> 93みたく勘違いしている
何処が間違っている?例を挙げてくれ
> 言い合ってても無駄だなーと思ったわけです
無駄なら今ごろのこのこしゃしゃり出てんじゃねーよ。
こういう奴ってウザイ、失せろ!
0114デフォルトの名無しさん
NGNG参照渡しと値渡しの話なんだが…
0115デフォルトの名無しさん
NGNGポインタでボインダ
0116デフォルトの名無しさん
NGNGまあ、んなことくらいでキレなさんな。大人げない‥
Cでのポインタ渡しは「call by value」
しかし、ポインタという性質を使うと
「call by reference」的な操作が実現できる
ってとこでしょ。アイノコってのはちょっと強引かと。
0117デフォルトの名無しさん
NGNGポインタ渡しは「call by value」である。
これが納得できない奴は厨房である。
0118デフォルトの名無しさん
NGNGアドレスが固定されるだけでそのアドレスがさす値は変えられる
・・・ってのは誤解ですか??
0119118
NGNG0120デフォルトの名無しさん
NGNG0121デフォルトの名無しさん
NGNG言葉など知らなくても問題無い、ということですか?
0122デフォルトの名無しさん
NGNG君はあほですか?
0123デフォルトの名無しさん
NGNG自己解決したみたいだけど、一応。
constの位置によって意味が変わるのです。
0124まとめ
NGNGにおいて、
a(ポインタ自身)からみればcall by value
*a(ポインタにさされるもの)からみればcall by reference
0125デフォルトの名無しさん
NGNGあれってインプリはなんだったのかね?
あとLispだとDynamic ScopeでShallow Bindingなんてするよね。
詳細は comp.lang.c Answers to Frequently AskedQuestions (FAQ List)
あたりを参照のこと。
Lispの例もあるし、Forthその他で 「参照渡し」というセマンティクスは
参照と束縛についての規範であり、実装時にポインタを使うかどうかは
別の問題。C++だと f( &i ); と f( *i ) を即座に同じコードに展開する
コンパイラが殆んどだが、違う束縛方法で実装したコンパイラを
禁止していない。
■ このスレッドは過去ログ倉庫に格納されています