- ベストアンサー
VBはCを混乱させる?
最初Cの勉強はじめるときこなこと数人の方にいわれました。「CとVB同時に学ぶと頭が混乱するから避けたほうが良い」と。 これって本当ですか? VBのいいところって何? VBとCの違いってなに? もう一度みなさんの意見がききたいです。
- みんなの回答 (10)
- 専門家の回答
質問者が選んだベストアンサー
C言語とVBの明確な違いを挙げて見ます。 C言語はかなり使い込んでいるのですが、VBは使い込んでいないので「もっといい」方法があるかもしれません。 ※ポインタの有無? VBにポインタってあったっけ? Cでポインタに慣れてしまうと、その他のポインタの使えない言語でプログラムが書きにくくて仕方ない。 例えば、ある文字配列(Cでの表現)の8文字目が知りたいとき、Cなら *(string+7) // これは式だから速い!! だがVBだと関数を使わなければならない? mid( string, 8, 1 ) ' 関数だから遅い!! 関数のポインタなんて覚えた日にゃ、ポインタを使えない言語がかわいそ過ぎる。 逆アセンブラを作ったときに実感した。 ※配列の添え字がCでは0から始まるが、VBでは1から始まる。1から始まるのは、どう考えてもおかしい。要素1つ分損する。 ※VBでは文字列の連結を string1 = string1 + string2 と書くが、コンピュータの仕組み(ハード的なことやOSのこと)を細部まで知っていると、なぜこのような文法が許されるのかが疑問になる。 ※VBは、数値・文字・文字列が曖昧だけど、Cでは明確に分かれている。 VBでは、文字列で宣言されたstringに"123.456"が代入されているときに整数で宣言されたint_valにstringを代入できてしまう。勿論、実数で宣言されたreal_valにも代入できてしまう。 int_val = string ' これができてしまう。int_valの値は、123だ。 real_val = string ' これができてしまう。real_valの値は、123.456だ。 Cでは、値のキャストができる。すなわち、実数型変数realの整数部分が欲しいときは、 (int)real // 変数のキャスティングと言う。 とすれば良い。しかし、VBでは、 int( real ) ' ここでも関数を使わなければならない。 とする必要がある。 ※Cはフリーフォーマットだけど、VBは書式に制限がある。 式が長くなりすぎて、2行に分けたいときに行末に _ を書かなきゃいけないって、おかしいぞ、VBよ。 ※Cは、非常に理論的な言語である。 #2の回答にもあるが、Cの代入は = で表し、比較の等号は == である(Pascalでは、代入は :=、比較の等号は =。)。 したがって、if ( a = foo( z ) ) ... と記述できる。 これは、関数foo()にzを渡した結果をaに代入して、if文で条件分岐、と言うこと。 VBではこのような記述はできない。なぜなら、VBのif文での = は、比較の等号だから代入にはなり得ない。 ※VBでは関数とプロシージャ(サブルーチンだっけ?)と意味的に同じモノを区別しているが、Cでは関数しかない。 VBで関数の戻り値を捨てるとエラーになる。これは余計なお世話だ。Cでは戻り値のある関数の戻り値は捨てても全然問題ない。戻り値を使う・使わないはプログラマの自由だ(ここら辺も論理的、ヒュ~!!)。
その他の回答 (9)
- php504
- ベストアンサー率42% (926/2160)
VBでは関数の引数がデフォルトで参照渡しになると読んだことがあります。 値渡しが標準だと思うんですがなぜなんでしょうね。
- TT414
- ベストアンサー率18% (72/384)
No.6さんへ >Cの配列は、 >val[foo()][func()] >のような使い方もできる。 Cだけでなく、最近の言語で出来ないのはありません。 出来ないのはFORTRAN位(Fortran77以前の)です。
- kakusuke
- ベストアンサー率36% (95/259)
> 最初Cの勉強はじめるときこなこと数人の方にいわれました。「CとVB同時に学ぶと頭が混乱するから避けたほうが良い」と。 > これって本当ですか? CとVBよりもCとC++とJavaを同時にやると、 構文が似通っているのに、 何でこれができないのかに迷うと思います。 VBはまったくといっていいほど、 Cとは異なる言語という発想でいけば、 それほど難しいとは思いません。 構文がまったく違うといってもいいです。 > VBのいいところって何? 1.画面設計が楽。 2.敬称という概念が無い。(悪いところでも有るけど。) > VBとCの違いってなに? &&という論理演算子が有るか無いか。 Cで出来ることの90%はVBでも出来る。 VBで出来ることの100%をCはできる。 ちなみにVBにもポインタの概念は有ります。 関数ポインタはあたりまえのように使えますが、 変数ポインタはほとんど使えないに等しいです。
- imogasi
- ベストアンサー率27% (4737/17069)
言語と言語の差・優劣 言語の特徴 などの質問が時々質問でのりますが、あまり意味がないように思う。 なぜなら 1冊の本に説明するようなテーマに対し、回答許容文字数は数百字。とても十分説明できない場合が多い。 エッセンスの説明や根底概念は、これから学ぶ人には理解が難しい。 回答の優劣、正否を判定する力が質問者にない場合が多いはず。 他人の習得エッセンスを借り物にしてしまう危険性あり。自分が本を読むなり、練習問題をやるなりすべき。 意見・回答は個人差が大きい。群盲象を撫ず。 いつも質問のテーマ念頭に置きつつ、自分で体験中、体験後にまとめるべきテーマであると思う。 ----- 一般になぜ同時に学ぶのか理解できないが、学校の授業プログラムならやむをえないが、独学なら、そんな余裕はないでしょう。仕事で、両者を結合しないとならないのなら、つべこべいえないでしょう。 ーーー プログラム記法(たとえば文の区切りの;と改行、配列記法、演算子、If、ForNext、大文字小文字、他多数) 概念の問題(ポインタ、データ型、オブジェクト諸関連、引数、クラス) コンパイル型 などありますが C->C++->Java--> Basic->VB->VB.NET以後ー> と近づいた感じです。 ーーーー 言語のどれを選ぶよりも、むしろ仕事を解決するために利用する場合、アルゴリズムや処理の流れ、文書化、データネームをはじめ書法の統一、分割化(共通部分の分割) などの方が、立ちふさがる問題のように思いますので、そちらにもご留意が必要と思う。
- naru_fumi2005
- ベストアンサー率13% (10/72)
#5です。 もう一つ、CとVBの違いがありました。 ※配列の表現方法が違う。 Cでは、変数に[]を付けることで配列にする。しかも、これは、演算子の一つである。VBでは()を付けるが、これは次の問題点がある。 foo(1,3,5) ' 果たしてfooは関数か変数の(3次元)配列か? 変数名()という表現は関数名()と同じなので、関数と変数の違いがわからない。 Cでは、val[4]とすればvalという変数の5番目の要素となり、foo( 8 )とすれば関数foo()に8を渡しているとなる。 Cの2次元配列は、 val[2,5] と表現しないで val[2][5] となる。すなわち、変数valに[]という演算子が付いてval[]となり、さらにval[]に[]という演算子が付いてval[][]となったのだ([]内の数値は省略)。 Cの配列は、 val[foo()][func()] のような使い方もできる。ただし、foo()とfunc()の型はint(またはchar)であるかint(またはchar)にキャストされなければならない。 やはり、理論的なんだ、Cは。 ※※※ C言語の論理性に惹かれてC言語を主として使っているのでC言語に偏っていることをお詫びします。 ※※※ 誰か、間違いがあったら指摘してくださいね。 いい加減に覚えてるところもあるので。
- azicyan
- ベストアンサー率21% (368/1747)
VBSを最近使っているのですけれど、 うっかりやってしまうのがセミコロンです。 セミコロンつけるとエラーになるんですよ・・・無視してくれてもいいのに・・・ IF文やFor文は書き方が違うのですけど、 実は大昔BASICをかじったことがあるので、実はVBの書き方のほうがなじみがあったりします。
- NNori
- ベストアンサー率22% (377/1669)
うーん、人それぞれだと思いますよ。同時に学ぶと混乱するかもしれませんが、言語の違いが良く分かっていいかもしれません。 今私はASP(ほとんどVB)の中にJavaScript(割とC++に似ている)を埋め込んでるんで、混乱しまくりです。 文末にセミコロン; を付けるの忘れたり、コメントに ' を使っちゃったりします。
- kokorone
- ベストアンサー率38% (417/1093)
一番の違いは、IF文ではないでしょうか? 例 aが1ならbに1を設定、それ以外ならばbに 0を設定 C言語 if(a == 1){ b=1; }else{ b=0; } VB if a = 1 then b-1 else b=0 endif C言語では、 if(a = 1){ b=1; }else{ b=0; } という記述もできますが、この場合、 『a=1』という代入の結果を評価して しまうため、常に真になってしまい、 b=1となります。(文法エラーになり ません。)
- OsieteG00
- ベストアンサー率35% (777/2173)
単純に、言語を2つ一度に学習しようとすると混乱しやすいというだけで、VBとCに限った話ではないと思いますよ。 VBのいい所は手軽なところですね。explicitをonにしておかないと宣言なしで変数を使えるところはバグのもとですが。 Cって、VC++の事ですかね?6.0までは結構違いがありましたけど、.netになってからは壁が低くなってきているような。
補足
基本の基本から学んでますのでC++ではなく、Cです。