C#開発者として、Javaを学習してAndroid用に開発するか、代わりにMonoDroidを使用しますか?[閉まっている]


46

私は、C#に精通していると思います。現時点では私の選択言語であり、基本的に私の専門的な経験はすべてここにあります。

それでも、MonoDroidプロジェクトの存在に戸惑っています。私の理解では、C#とJavaは非常に近いということです。例えば、あなたが一方を知っていれば、もう一方を本当に素早く学ぶことができます。ですから、最初のAndroidアプリの開発を検討しているとき、Javaを使い始めて、学習しながら学習するのに十分なJavaに精通していると思いました。

これは、Java Android SDKよりも機能豊富ではない可能性が高いMonoDroidを使用するよりも理にかなっていないのでしょうか。あなたが経験している技術にこだわるよりも、新しい言語(そして、その時点で非常に人気のある言語)を学び、その言語で経験を積む方がいいと思います。で、それ以上の貴重なスキルを獲得することなく。

たぶん、私は平均的な潜在的なMonoDroidユーザーをひどく間違って伝えています。たぶん、Javaと.NETの経験があり、.NETを好む人にとってはもっといいでしょう。または多分(実際にはそうであるかもしれません)私がちょうど考慮しなかった他の要因があります。Javaを使用してAndroid用に開発するのではなく、なぜMonoDroidを使用するのでしょうか?


11
Googleのフレーズ「新しいCOBOLである」と言語のGoogleが思い付くものを参照してください...
ジョン・レイノルズ

1
@JohnReynolds Ironicの場合、現在最も急速に成長しているのは、「新しいCOBOL」を使用したモバイルとAndroidです。MonoDroidを選択したとしても、Android向けに開発している場合でも、「新しいCOBOL」に依存しています。
ジェイソンS

1
「新しいCOBOL」とは、VM(JVMまたはDalvik)ではなく言語を指します。そのため、MonoDroidは「新しいCOBOL」に依存せず、ScalaとClojureまたは他のJVM言語にも依存しません。
ジョンレイノルズ

まだ古いCOBOLも大量にあります。
アランB

@JohnReynolds皮肉なことに、今日実行されているコードのほとんどはCOBOLです。そして最も皮肉なのは、C#がJavaのクローンであるという事実です(また、それは間違ったもののほとんどをクローンしたため、貧弱なものです)。
m3th0dman

回答:


55

有能なC#プログラマーであれば、Androidプログラムを作成するのに十分なJavaを迅速に取得できるはずですが、それはポイントではありません。コードの再利用の問題です。

Androidプログラムが人気で、ユーザーがiPhoneとWindows Phone 7のバージョンを求めている6か月後を考えてください。MonoDroidを使用したことがある場合、MonoTouch(Mono for iOS)でほとんどのアプリケーションロジックを再利用できます。 Windows Phone SDK。Webベースのバージョンが必要なため、ASP.Netプロジェクトに同じクラスライブラリを含めます。デスクトップ版?問題ありません。同じクラスライブラリがWindowsの.NetまたはLinuxおよびOS XのMonoで動作します。

CまたはC ++以外に、これらのすべてのターゲットで同じコードを再利用できる他の言語は考えられません。

編集コメントにいくつかの懸念に対処するために: .NETおよびモノラルはないでしょう、あなたはどこにでも完全なプログラムと使用するのと同じプログラムを書いてみましょう。彼らはあなたが共有できるようになるいくつかのコードを、共有コードの量をプログラミングするすべてのクロスプラットフォームのようなプログラムあなたがしている書き込みとどれだけあなたがアプリケーション・ロジックからUIやハードウェアコードを区切るの種類によって異なります。

ただし、AndroidアプリをJavaで記述する場合、iOSまたはWindows Phoneでどれだけ再利用できますか?それが私がやろうとしていたポイントです。すでにJavaを知っていたとしても、 Mono for Androidで作業している既存のC#ライブラリが、再実装にかかる時間よりはるかに短かった。Monoのおかげで、2つの異なるモバイルプラットフォーム上のWebサイト、デスクトッププログラム、およびモバイルアプリ間で共有された(変更されていない)コードがあります。

間接的であっても、Monoがあらゆるモバイル開発の状況に最適なツールであることを意味するつもりはありませんでした。それはトレードオフですが、Monoがはるかに良い選択である状況があると固く信じています。

別の視点については、ジェイソンSの答えをご覧ください(そして賛成してください!)。


12
そして、Javaは「どこでも一度実行してください」というスローガンを持つものだと思いました!
ルチアーノ

3
@Luciano- OPがJavaを知っていて、C#を学ぶべきかどうか疑問に思っていた場合、同じ引数適用できます。重要なのは、言語ではなくコードの再利用です。
ChrisF

14
同じ理由で、家でモノが選ばれました。複数のプラットフォームでクライアントを構築し、すべてのコーダーが新しいc#を作成する必要がありました。理論的には、素晴らしいアイデアでした。しかし実際には、それは少し悪夢に変わりました。ネイティブ.NETプラットフォームで機能するコードがMacOSプラットフォームでは機能しない場所が多くあるため、例外を作成する必要がありました。その同じコードはLInuxで機能しませんでした。全体として、モノは不安定すぎるように見えました。最終的には、アイデアを放棄して、ターゲットOSのネイティブコードの記述に戻る必要がありました。
チュウ

4
それでも、再利用可能な唯一のコードはビジネスロジックであり、UIコードや電話ハードウェアと対話するコードではありませんMonoTouchまたはWindowsPhone 7アプリケーションを持っていることご覧ください。Monofor Androidでそれを再構築してAndroidをターゲットにできますか?MonoDroid FAQで。
ジェイソンS

2
@JasonS、私はあなたのコメントに対処するために私の答えを更新しました。記録のために、XamarinとMonoに対する私の唯一の関与は、満足したユーザーとしてのものです。
ケビン

18

これは一種の補足的な回答です。これまでの回答では見過ごされていたように思われることの1つは、実際にクロスプラットフォームであることに関係するためです。Xamarin自体によると、これは基本的にビジネスロジックであり、UIやGPS、オーディオ、アドレス帳などのハードウェアコントロールではありません。これらは、各プラットフォーム専用に作成する必要があります。よくある質問のエントリご覧ください。MonoTouchまたはWindowsPhone 7アプリケーションを持っていますが、Mono for Androidでそれを再構築してAndroidをターゲットにできますか?

Monoを使用すると、C#を使用してUIと電話制御コードを記述できますが、どのプラットフォームにも移植できません。C#で記述できても、各プラットフォームのUIと電話コントロールを記述する必要があります。いずれにしても、AndroidのUIコントロールの詳細と、Androidが電話リソースを処理する方法を学ぶ必要があります。

Monoを使用して、Android APIを呼び出すMono APIを学習する必要があります。また、Monoが新しいAndroid機能を実装するのを待ち、すべてのAndroid機能が実装されることを期待する必要があります。C#がJavaよりも強力な場合でも、Android SDKを(Javaで)直接使用する場合よりも多くのことを行うことはできません。

C#がJavaに非常に構文的に類似しているため、C#からAndroidに直接移行する場合、C#開発者のAndroid向け学習のほとんどはAndroid APIの学習になります。

いくつかの考慮事項...

C#からAndroid

学ぶ必要がある

  • Android API
  • Java API:文字列、カレンダー、イベント処理など。

学ぶ必要はありません

  • Java構文:C#は非常によく似た構文です。

その他の考慮事項

  • プラットフォーム間でコードを再利用することはできません。
  • あなたとAndroid SDKの間に依存関係はありません。Androidの新機能はリリースされるとすぐに入手できます。
  • おそらく、MonoよりもAndroidコードのサポートとサンプルの方が優れています。

C#からモノラル

学ぶ必要がある

  • Android:AndroidのUIとハードウェア制御機能を学ぶ必要があります。
  • Mono API:MonoのAPIを呼び出して、AndroidのUIとハードウェアを操作する方法を学ぶ必要があります。

学ぶ必要はありません

  • Java APIと構文:C#で開発できます

その他の考慮事項

  • コードの再利用:UIまたはハードウェア制御コードがなく、純粋な「ビジネスロジック」であるC#コードを再利用できます。理想的ではありますが、このようなクリーンな分離は必ずしも容易ではありません。コードのどの部分にUIまたはハードウェアコントロールがないかを評価する必要があります。
  • 依存関係:Android APIを実装するMonoに依存しています。Android APIリリースからの遅れがある場合や、一部のAndroid機能が実装されない場合があります。
  • 選択できるドキュメントとサンプルが少ない場合があります。

P / Invokeに言及するのを忘れました。サンプル。
アミールカリミ

-1:どういう意味Learn the Mono APIですか?Androidアプリを開発するために実際にどれだけ知る必要がありますか?そして、実際にMonoDroidを試しましたか、それとも推測していますか?
ジムG.

@JimG。ことでLearn the Mono API、私はあなたがまだそうでない部分に加えて、モノが複製することをAndroidのAPIを学ぶ必要があることを意味し、。どのくらい知る必要がありますか?アプリに依存し、人に依存します-それは本当にOPの要点ではありませんでした。MonoDroidを使用しましたか?いいえ。C#、Java、Objective Cの経験があるため、必要はありません。移植性のためにMonoを検討しました。当時、私は誰も携帯性の限界に言及していないと答えました。私に反対する人は気にしないが、それだけでは私の答えが悪くなることはない。
ジェイソンS

13

その多くは、利用可能なリソースに関係していると思います。

C#とJava の構文は似ているかもしれませんが、それらは非常に異なるものを提供します。たとえば、標準のJavaライブラリを使用して日付を操作するのは悪夢ですが、C#では非常に快適です。


2
おもしろいので、魅力は.NETライブラリへのアクセスを得ることです。.NETがAndroidに関連する便利な機能を多数提供しているかどうかを知りましたが、Java Android APIを使用して実現するのはより困難です。
ダン・タオ

19
+1-C#から来て、私はjavaが...せいぜい特異であることがわかります
...-Oded

4
私は、C#とJavaを切り替えるとき、C#とJavaの類似点は利点ではないことを発見しました。C#とPython、RubyまたはLuaを点滅なしで切り替えることができますが、前回Javaコーディングを試みたときに、歯を磨いてホイールを回転させました。
アダムクロスランド

1
@Dan Tao:魅力は標準の.Netへのアクセスだけではありません。それはそれと再利用の両方についてです。再利用の利点は明らかです。.Netへのアクセスに関しては、このように見ています。たとえば、XDocument 1000を1回使用しました。サービスからのXMLデータを統合するモバイルアプリを作成する必要がある場合は、考えの速さで作成します。Javaを学習している場合、コーディングとドキュメントの読み取りを4〜8倍(または、知っている10または12)で簡単にやり取りできます。使用がビジネス用である場合、言語を学習しながらプロジェクトを行うことは無責任です。
クエンティン・スターリン

9

新しい言語を学ぶ絶好の機会のようです。

同じ概念に基づいているため、C#からJavaへの移行は簡単です。JavaはC#のサブセットのようなものなので、いくつかのこと(プロパティやアセンブリなど)を学び直して、いくつかの新しい規則に慣れる必要がありますが、ほとんどは簡単です。


10
そして、それぞれでジェネリックがどのように機能するかの違いを把握し、プロパティが存在しない理由と、イベントと
...-Oded

5
わずかな違い。彼がHaskellを学ばなければならないというわけではありません。
マーティンウィックマン

1
+1いくつかの異なる言語を知っていて、現実世界のプロジェクトに取り組むことに害はありません。既に知っている言語と類似した言語であれば、その言語を理解するのに最適です。
グレナトロン

支払った人が学習経験に対して支払っても大丈夫であることを確認してください。
クエンティン・スターリン

1
@qes-冗長な何かを学習することは、ほとんどの場合コストを正当化する理由としては十分ではありませんが、ネイティブ環境での複雑なアプリの開発はほとんどの場合よりスムーズに行われ、学習をより多くすることができます長期的なコスト削減。
モーガンハーロッカー

3

クイックヒストリレッスン-MonoDroidはMonoTouchから生まれました。当時はたくさんの意味がありました。残念ながら、Novellは売却され、Monoチーム全体が解雇されました。良いニュースは、Miguel de Icazaが資金を確保し、MonoTouch / MonoDroidを再構築するための新しい装備を開始したことです。ですから、実際にローンチするまでは、あなたはちょっと困惑しています。

2011年7月の更新:Miguelの服装がMono *スタック全体の権利を取り戻しました。それがhawtである間にそれを入手してください。


聞いてよかった(2011年7月更新)。以前にMonoを試したところ、少しがっかりしました。もう一度試してみます!
ブライアン・ノブラウフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.