質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

8回答

1675閲覧

C# の最短学習方法を教えてください

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

4グッド

1クリップ

投稿2018/09/17 05:20

編集2018/09/20 06:22

最短で C# を学びたいです。C# の言語的知識はほぼ 0 です。
効率の良い学習方法を教えてください!

背景

Web コンテンツの更新を行うためのデスクトップアプリを作ろうと思い、「ならば C# でしょw」と3連休で学習を始めたのですが、ちょっと効率よく学びたいと考え質問してみました。

当方 PHPer で、作成してきたアプリは Web サービスがほとんどです。

現在の学習方法

Microsoft Visual Studio 2017 Community を使用して、サンプルを動かしながら座学中。
参照サイト:C# のガイド-docs.microsoft.com
飽きたら、Qiita 等の入門記事閲覧

知りたい情報

PHPer が C# を学ぶにあたって注意すべき箇所
デスクトップアプリ制作の勘所
採用すべきコーディング規約(フレームワーク デザインのガイドラインを今は読んでます)
学習に向いた参照すべき OSS
採用するパッケージの選定基準

今の所の感想

できることが広がった感じがして、厨二病的万能感に浸っています。
ただ、php との差異が大きく、ある程度勘所を押さえないと、遠回りしそうだなぁと。

知りたい情報のキッカケは以下な感じ
・ツール(VS)に従って作ると、Form1.cs がどんどん大きくなって気持ち悪い
・this 省略したら、スコープがよく分からんくなるけど大丈夫?
・モダンな書き方を参考にしたいけど、参考にすべきコードが分からん。

Visual Studio が非常に良い仕事をしている気がするけど、そのせいで、学習に必要な基礎が飛んじゃってる気もする。ツールが肩代わりしている、初心者の気にすべき事もあれば教えてください!

散文的な質問で恐縮ですが、ご教示いただけると幸いです。
よろしくお願いいたします。

Koopa, bochan2, aaaaaaaa, Wind👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2018/09/17 05:56

何を釣ろうとしてるんですか?通報しますよw
退会済みユーザー

退会済みユーザー

2018/09/17 06:00 編集

ちょっと、釣が過ぎました^^;回答の方向性がブレちゃったんで、タイトルから「至急」をはずしました。質問内容は真面目ですよ。
sazi

2018/09/17 06:01

至急が消えましたね。割とマジな質問なのかしら
退会済みユーザー

退会済みユーザー

2018/09/17 06:06

正しい学習しないと使いモンにならんのは、php でよく認識しているのでマジですよ。まぁ、質問が散文なので回答付けばラッキーぐらいの質問ですけど。
sazi

2018/09/17 06:11

php経験が無いので、回答できませんけど、言語の歴史(背景)調べると見えるポイントもあると思います。
sazi

2018/09/17 06:12

C#はjavaとC++を足してweb系を強化みたいな事が背景だったと思います
退会済みユーザー

退会済みユーザー

2018/09/17 06:41

その前提でいくと随分前に分化しちゃってて、途中の java、C++ がわからないという^^;
guest

回答8

0

ベストアンサー

te2ji さんともあろう人に今更効率のよい勉強方法もなかろうと思うのですが

・ツール(VS)に従って作ると、Form1.cs がどんどん大きくなって気持ち悪い

イベントハンドラの中に全部書くのが楽ですから、そうなりがちです。
ですが、ビジネスロジックはなるべく他のクラスに分離してイベントハンドラはそれを呼び出すだけにするようにするといいと思います。

データバインディングが使えますので、まずはコントロールとオブジェクトとのバインディング、それとコントロールと設定(Properties.Settings.Settings)とのバインディングを調べてみるのが良いかと。
そうすれば分離しやすくなります。

・this 省略したら、スコープがよく分からんくなるけど大丈夫?

これは慣れですかね。
省略しなくても大丈夫です。

基本的にデザイナーから作ったイベントハンドラの中の this はフォームを指します。
ボタンクリックのイベントだろうがリストボックスの選択イベントだろうが、フォームです。
コントロールのイベントにフォームのメンバーを登録しているからです。

イベントを起こしたコントロールを知りたい時には sender を使います。
型は object なので、これを適切な型にキャストしてください。

・モダンな書き方を参考にしたいけど、参考にすべきコードが分からん。

今モダンなのはお使いの Windows Forms ではありません。
デスクトップアプリであれば大きく分けて WPF と UWP の二種類があります。
それらを MVVM で使います。
HTML と CSS の代わりに XAML、PHP と JavaScript の代わりに C# を使うというイメージです。

WPF は基本的に Windows 用で UWP は基本的に Windows 用です。

何を言ってるかわからないと思いますが、WPF は従来の Windows アプリを作るもので、UWP はマルチプラットフォームを一応うたった新しい Windows アプリを作るものです。
UWP は Windows タブレットで使えますが、機能制限が多く学習コストは上がります。

ただ、Windows Forms は圧倒的に学習コストは低く、現役で十分使えるパワーも持っていますから、無理にモダンを目指さずそこから入るのが楽しいと思います。

#追記(余談)

データバインディングと Reactive Extensions を使ったモダンっぽい書き方の例です。

###ソリューションの作成

Windows Forms プロジェクトを作成し、ボタンを 3 つ貼り付け、必ず名前を付けて保存してください。
ここでは WindowsFormsApp1 としました。

###Reactive Extensions のインストール

パッケージマネージャーコンソールを開き、Install-Package System.Reactive とコマンドを実行してください。
これはソリューション毎にインストールされますので、別のソリューションでも使いたい場合にはその都度インストールする必要があります。

###Unlock クラスの作成

プロジェクトに新しいクラスを追加し、次のように書き換えてください。
そしてここで一度ビルドしてください。

C#

1using System; 2using System.ComponentModel; 3using System.Linq; 4using System.Reactive.Linq; 5using System.Runtime.CompilerServices; 6using System.Windows.Forms; 7 8namespace WindowsFormsApp1 9{ 10 public class Unlock : INotifyPropertyChanged 11 { 12 public event PropertyChangedEventHandler PropertyChanged; 13 14 protected virtual void OnPropertyChanged([CallerMemberName]string propertyName = null) 15 { 16 PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 17 } 18 19 public Unlock(params (Button button, int count)[] keys) 20 { 21 var orders = keys 22 .SelectMany(key => Enumerable.Repeat(key.button, key.count)) 23 .Reverse() 24 .ToArray(); 25 keys 26 .Select(key => key.button) 27 .Distinct() 28 .Select(button => Observable 29 .FromEventPattern<EventArgs>(button, nameof(button.Click)) 30 .Select(eventArgs => eventArgs.Sender) 31 .OfType<Button>()) 32 .Aggregate((a, b) => a.Merge(b)) 33 .Scan(Enumerable.Empty<Button>(), 34 (list, button) => new[] { button }.Concat(list).Take(orders.Length)) 35 .Subscribe(buttons => 36 { 37 Unlocked = buttons.SequenceEqual(orders); 38 }); 39 } 40 41 protected void SetValue<T>(ref T field, T value, [CallerMemberName]string propertyName = null) 42 { 43 if (Equals(field, value)) return; 44 field = value; 45 OnPropertyChanged(propertyName); 46 } 47 48 private bool unlocked = false; 49 public bool Unlocked 50 { 51 get => unlocked; 52 set => SetValue(ref unlocked, value); 53 } 54 } 55}

###ボタンと Unlock をバインド

デザイナーを開き、button3 のプロパティを開き、(DataBindings) を展開し、「詳細」の「…」をクリックしてください。
プロパティペインから Enabled を選択し、バインドコンボボックスをドロップダウンし、「プロジェクトデータソースの追加…」をクリックしてください。
「オブジェクト」を選択して「次へ」
「Unlock」にチェックをつけて「完了」
「OK」で閉じると、「unlockBindingSource」がフォームに追加され、button3.Enabled がそれとバインドされます。

###Form1

デザイナーで button3 をダブルクリックし、次のように書き換えてください。

C#

1using System; 2using System.Windows.Forms; 3 4namespace WindowsFormsApp1 5{ 6 public partial class Form1 : Form 7 { 8 public Form1() 9 { 10 InitializeComponent(); 11 Unlock = new Unlock((button1, 1), (button2, 2), (button1, 1)); 12 } 13 14 public Unlock Unlock 15 { 16 get => (Unlock)unlockBindingSource.DataSource; 17 set => unlockBindingSource.DataSource = value; 18 } 19 20 private void button3_Click(object sender, EventArgs e) 21 { 22 if (!Unlock.Unlocked) return; 23 MessageBox.Show("ガチャッ"); 24 } 25 } 26}

###実行

実行し、button1 を 1 回、button2 を 2 回、button1 を 1 回、この順に押してください。
button3 が押せるようになるので、それをクリックすると「ガチャッ」と表示されます。
この回数は Form1 のコンストラクタの以下の部分で指定しています。

C#

1Unlock = new Unlock((button1, 1), (button2, 2), (button1, 1));

これと同じことを真正直にしようと思えば、button1 button2 をクリックされた時に複雑なフラグ管理をしなければいけませんが、Reactive Extensions と LINQ を使うとこんなにすっきりと書くことができます。
最初は読みにくいと思いますが、読み慣れたらなんということはありません。

投稿2018/09/17 07:17

編集2018/09/17 15:08
Zuishin

総合スコア28656

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2018/09/17 07:54

あと調べる上で重要なことですが、Windows Forms と WPF および UWP と ASP .NET で同名のクラスがあります。 名前空間は違うのですが、例えば三種類の ListBox クラスがあって互換性がないので気をつけてください。 「forms listbox」「wpf listbox」のように「何の」をつけて検索する必要があります。
退会済みユーザー

退会済みユーザー

2018/09/17 07:58

回答ありがとうございます。 「トリガー」箇所に関して、理解が進みました。入り口からして間違ってるとは思ってませんでしたがw Windows Forms で小物を2,3作ったあと、WPF と UWP も試してみようと思います。 C#、思っていた以上に楽しいです。 もう少しアドバイスを頂きたいのですが、関連記事を読んていくにあたって、用語定義的なところで勘違いしそうなものってあったりしますか? 例えば、php の記事の文脈で API とでれば、ほぼ Web API を指すと思いますが、他の言語だとそうでない場合も多く、そのあたりを知っていないと、ぜんぜん違う理解をしてしまうケースがあると思います。 C# と php だと直接的な対比があまりないので、間に JAVA を挟んで用語の対比を調べているのですが、JAVA をあまり知らないので効率が悪く^^; もし思いつくものがあれば、よろしくお願いいたします。
Zuishin

2018/09/17 08:42

別に間違ってはいませんよ。Windows Forms は十分現役です。 そうですね。即座に思いつくようなのはタスクとアセンブリでしょうか。 タスクは Task クラスとともに使われる一連の処理のことで、スレッドとほぼ同じ意味で使われる場合もあります(正確には違います)。スレッドを作る Thread クラスというのもありますが、これはなるべく使わず、タスクを使ってください。 アセンブリはアプリケーションの一部となる部品で、exe や dll やその他ファイルの集合ですが、ほとんどの場合は単一ファイルです。 あと、ArrayList は内部で配列を使って実装されたリストの一種で、古いサンプルコードでは多用されていますが、現在は List<T> を使ってください。 集合の処理は LINQ を使うと C# らしくなります。 また、追加インストールしなければなりませんが、LINQ に時間軸を加えた Reactive Extentions を使うとイベントや非同期処理が散らからず見通しよく使えます。 自作クラスのデータバインディングには ReactiveProperty が便利です。 これらは後乗せですが、モダンなコーディングにはほぼ必須と言ってもいいレベルにあるかもしれません。(議論の余地はありますが少なくとも存在は知っておくべきものです)
退会済みユーザー

退会済みユーザー

2018/09/17 12:54 編集

> タスクとアセンブリ 文脈でちゃんと読まないとハマる系ってことですね。 関連ドキュメントを確認してみます。 > LINQ と Reactive Extensions どちらもまだ触ったことのない範囲なので、先に概念だけ斜め読みしておきます。 LINQ ってよく見るんですけど、全く読み飛ばしてたんで、ちょっと公開しています。 言語のおかげなのか、フレームワークのおかげなのか、ツールのおかげなのか、今の所、思った以上に思ったことが記述できる環境で、びっくりしています。 コメント大変助かりました!ありがとうございます。
Zuishin

2018/09/17 09:47

綴りを間違えていたので訂正します。 × Reactive Extentions ○ Reactive Extensions
pepperleaf

2018/09/17 13:01

脇から、失礼します。 > Reactive Extensions 結構、便利みたいですね。今、やってる画面制御、これがあれば、手間半減て感じです。ただ、標準に含まれていない(?)の残念。次の機会(あれば)に検討したいと思います。ただ、標準処理を知ってないと使いずらい? でしょうか。 LINQは、便利です。ただ、こちらも最初から手を出すには、理解が大変? C#の元となったC言語の体系からは外れている気がします。次はラムダ式? 最初から、手を出すのが良いのか、良く分かりません。(自分が Cから入ったためかも知れませんが)
退会済みユーザー

退会済みユーザー

2018/09/17 13:07

無事、カギを開けることができましたw バインドするにあたり、一度コンパイル(?)しておかないとバインド候補として上がってこないんですね^^; ちょっとハマってしまいました。 指示通りのコピペで動かしたので、正確には何をやっているのか理解できていませんが、なんとなく理解できた気になる程度に読みやすい言語な気がします。 少し遊んでみます。 面白い追記、ありがとうございました!
Zuishin

2018/09/17 13:53

pepperleaf さん Reactive Extensions は今は標準ではありませんが、IObservable<T> は標準ライブラリに含まれていますし、いずれこっちも標準に入る可能性があります。 と言いつつ結構待たされてるので、いつになることやらわかりませんが。 ラムダ式→LINQ→Reactive Extensions の順に学ぶのがいいかもしれませんね。 te2ji さん すみません、ビルドしなきゃいけないのを忘れてました。 このようにデータバインディングを活用するのが今風、というほど新しくありませんが、フォームのコードビハインドはこのように小さくすることができます。 このあたりは Vue.js とも通じるところがあろうかと思います。 今回の Unlock クラスは手抜きなので System.Windows.Forms.Button に依存していますが、本当はこの依存部分も分離してもう一つクラスを作りたいところです。
guest

0

効率の良い悪いは人それぞれだと思うんです。私は。

ひたすら言語仕様を読んで覚えてしまえば思い通りに使えるようになる人もいるし、
人が書いたコードを読みまくって参考にすることで覚えていく人もいるし、
なんとなく行き当たりばったりに作りたいものを作り続けてそのうちマスターしちゃう人もいるし、
紙の本が好きな人もいればネット大好きな人もいれば人に教わりたい人もいるだろうし、

なにより、勉強を始めようとする時点でのベースの知識からして違いがあるのですから、性格とか加味するともうなにが最短でなにが効率が良いんだか、他人からはわかりません。

ちなみに私が新しい言語を覚えようとするときは、その言語の仕様とにらめっこしながらごくごく小さいコード片を書きまくるか、なんとなく傾向が似てる言語と同じように書いてみながら作りたいものを作ってしまいます。
それが良い(と言われる)書き方なのかどうかはあとまわしです。
仕事で使うんでもなければ、別に古い書き方だろうがセキュリティ的にNGだろうが気にしません。
そのうちなんとなくそういうのもわかってくる時がきます。

追記

とても古い記事ですが、こんなのありましたよ。
CodeZine - PHPでデスクトップアプリケーションを作る

PHPerならPHPerらしく、PHP貫いてもいいんじゃないですか。

投稿2018/09/17 05:31

編集2018/09/17 05:57
spookybird

総合スコア1803

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/09/17 05:34

回答ありがとうございます。 > それが良い(と言われる)書き方なのかどうかはあとまわしです。 確かにデスクトップアプリ(自分用)なら、後回しでも良いかもしれないですね。 不具合出てから学ぶって方法もありな気がしてきました!
spookybird

2018/09/17 05:46

あと、あえて言いますが 「Web コンテンツの更新を行うためのデスクトップアプリを作ろうと思い、「ならば C# でしょw」と3連休で学習を始めた」 ここからして謎です。なぜC#。 私ならElectronで作ります。JavaScript大好きなんで。 VBでもいいじゃないですか。Javaという手も。なぜあえてのC#。いや別にダメってわけじゃないんですけど。
spookybird

2018/09/17 05:47

あ、そうそう。Cでもデスクトップアプリ作れますよ。 学生の頃はCしか書けなくてそれで頑張って作ってました。今思えばめちゃくちゃ面倒なことやってたなと。
退会済みユーザー

退会済みユーザー

2018/09/17 06:03

最初に思ったのは Electron だったのですが、ちょっと C# 学習してみたいなぁと思いまして。 今、素敵な万能感に浸ってるんで、間違ってはなかったと思っているのですが、学習の勘所を押さえたいのでご教示いただける部分があれば、よろしくお願いいたします。
tacsheaven

2018/09/17 06:06

Windows アプリを C で作ると苦行ですよね(w かといって MFC で作っても苦行ですが。 ※MFC ってオブジェクト指向をきちんとやった人からすると酷い設計ですから……
Zuishin

2018/09/17 14:32

Electron はわかるんですが、なぜ C# より VB や C なのかの方が謎です。 どう考えてもその二つよりは C# でしょう。
spookybird

2018/09/17 21:15

いえ別にどれがいいと言ってるわけではないです。デスクトップ = C# と決めつけなくてもどんな手段でも作れるので、「デスクトップアプリ作りたい」のと「C# やりたい」のはつながりが謎だなーと思ったまでです。
Zuishin

2018/09/17 23:52 編集

どうしてそのつながりが謎なのかいまいち掴めませんね。 もしかして C# はマイナーな言語だと思ってませんか? それなら意味が通じるんですが。 Windows のデスクトップアプリという分野で言うなら第一選択肢に入ると思いますよ。 環境も資産も情報もものすごく豊富に整ってます。 C#(というか .NET)が Windows に特化しているので、マルチプラットフォーム必須の環境ではもしかしたら馴染みがないかもしれません。 ようやく最近 .NET Core や Xamarin や Unity で他のプラットフォームに進出し始めましたが、元々はマイクロソフトのマイクロソフトによる事実上 Windows のための専用言語で、「Windows アプリを作るなら C# を使いなさい」と Windows のメーカー自らが無料のツールや情報をバンバン出してサポートしているものです。
spookybird

2018/09/17 23:55

私がWEB系の業界にいるせいかもしれません。 C#はとてもマイナーな言語扱いです。 製品として出す場合でも基本はマルチプラットフォームを念頭に置いて作られるので、MSに縛られるのを嫌う感はあります。 Windowsに限定するならC#がメジャーなんですね。
Zuishin

2018/09/17 23:57

納得いきました。
asm

2018/09/18 00:22

マルチプラットフォームこそCやVB(非.NET)はツラい感がありますね .netはmonoが頑張ってるので動きはしたはず
Zuishin

2018/09/18 03:19

つらいですね。 C はコンパイルし直すにしてもマルチプラットフォーム対応した GUI フレームワークが見当たらないので各環境に合わせて全部作り直すはめになるし、マゾの暇人以外誰がそれをできるのかという。 VB で非.NET というと大昔の VB か、それとも VBS や VBA も仲間に入れるか。 VBA は Mac なら使えるかもしれませんが、だったら iOS でも Android でも Linux でも使える C# の方がマルチプラットフォームと言えますね。
guest

0

PHPで出来る事はPHPでやっちゃった方が良いと思うのでちゅ。
だから、PHPで出来ない事に絞って学習していくのが良いと思うのでちゅ。
あれもこれもそれもどれもやろうとしたら、時間が勿体無いのでちゅ。
特に、おっさんなら尚更でちゅ。
おっさんに残された時間は限られているのでちゅ。

というか、普通はthisなんていらないでちゅ。
thisが必要な方がおかしいでちゅ。
アンカー無しで話したら、それは高い確率で自分の事を言っているのでちゅ。

C#だろうが、E♭だろうが、やるべき事は変わらないのでちゅ。
「目の前にある現実世界の問題を解決する事」

おっさんたちは、その辺のところが全く理解できていないから
やれあの言語がどうした、この言語はなんだ、どうでも良い事ばっかりにこだわっているのでちゅ。

いい加減に目を覚ますのでちゅ。

投稿2018/09/17 05:41

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

その言語が一番有利な状況で実際に使えるものを書く。(まぁWindowsアプリとか)
言語解説書とか、言語仕様書とか、一通り解説しているものをざっと読む。
便利そうなライブラリ取り込んで使う。使いながらそのコードを読む。
以下繰り返し。

ということだと思いますが、PHPでも同じ話だったのでは。

自分が必要だと感じていない言語は身につきません。
(という議論をしたいのでしょうか…)

それと、公式の開発環境が非常に強力であれば、まずそれに頼るべきです。
言語と開発環境との関係は、プログラマのわがまま以上に強いです。
スコープだってエディタが理解してくれてるならそれでいいと思います。

投稿2018/09/17 06:18

daisuke7

総合スコア1563

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/09/17 06:36 編集

回答ありがとうございます。 > 言語解説書とか、言語仕様書とか、一通り解説しているものをざっと読む。 便利そうなライブラリ取り込んで使う。使いながらそのコードを読む。 このあたりをショートカットしたいなぁと。 たとえば、学習にあたって用語の定義が重要になってくると思いますが、言語間で違う意味に取られる用語も多数存在しています。(例えば、ruby のハッシュとか) また、仕様上のふるまいの違い等も言語間で明確な差異があるものがあります。(代入の渡し方とか) 多分、使用用途(Web みたいな外部からのアクセス前提とデスクトップアプリのようなクローズド(?)前提)でも大きく気をつけるべき箇所が異なると思います。 こういった差異を事前に押さえておけば、学習効率が上がると思ってます。 そのあたりに関して知りたいと考えておりますので、コメントいただけないでしょうか? よろしくお願いいたします。
daisuke7

2018/09/17 06:44

結局同じ回答になってしまいそうなのですが、 「事前に押さえる」ということだけ考えると、 「なぜその言語が生まれたのか。今までの言語に比べてなにが有利なのか」 あたりは結構重要です。もちろんそれに自分も賛同できることも重要。 細かい差異とかは結局まともに言語仕様学ぶしかないですけど、 言語の生い立ちを知っていると理解しやすい(場合もあります:p)
退会済みユーザー

退会済みユーザー

2018/09/17 06:51

> 「事前に押さえる」ということだけ考えると、 「なぜその言語が生まれたのか。今までの言語に比べてなにが有利なのか」 このあたりの信頼できる情報ってお持ちですか? ニュアンスの理解も必要だと思い、主に日本語サイトを中心に調べてみたのですが、php と C# の対比に言及している記事を確認できませんでした。 もし情報をお持ちであれば、教えてください。 その場合は海外サイトでも助かります。
daisuke7

2018/09/17 07:09

選択候補として「C#とPHPどっち使おうか」なんてことは考えたことがないです。 (戦場が違います。Apache系なのかASP.NETなのか、なんて話はあるとしても言語では選ばない) もうたどり着いてそうですが試しで "PHP vs c#" とぐぐったらこんなスライドありました。参考までに。 https://www.slideshare.net/neuecc/c-22979400 C#に最初に出会ったのはWindowsアプリがりがり書いてた頃のC# 1.0ですが、 「Delphi作った言語設計者がマイクロソフトに移って、DelphiとJavaのいいとこ取りしながら COM(Windowsのコンポーネントモデル)も楽に扱えるようにした言語」 というのが発祥です。だから当時のWinアプリプログラマは狂喜しました。 だから言語比較という意味では、Delphi(これもう過去過ぎて追うのが難しいですが)や Java、C++などと比較すべきです。
退会済みユーザー

退会済みユーザー

2018/09/17 09:49

戦場が違うので用語的なものやコーディングの勘所に差異があり、それを押さえることが効果的だと考えて質問しました。 今、中間にいるであろう JAVA を挟んでの差異を確認しています。が、あんまりはかどってませんw ざっと確認できる用語や勘所の差異は無さそうなので、これ以上時間をさくのは無駄かなと思っています。 愚直に進めてみようと思ってますが、注意点等のアドバイスがあれば、よろしくお願いいたします。 コメント、ありがとうございました。
guest

0

やりたいことは、必ずしもアプリを使う必要があるのか、というところに立ち返ったほうが良いかもしれません。
Web コンテンツの更新というのは、どういうことでしょうか。

  • 一般的な Web サイトにおける、例えば「お知らせ」や「ニュース」といった情報を更新する
  • 広告などの画像を差し替える
  • 画面デザインを変更する

こういったことだと、下手にアプリを作るより直接操作したほうが自由度も手間も下がるでしょう。せいぜい情報更新でしょうが、それなら Web アプリで十分なはずです。

システムで必要なのは「必要なことを過不足なくできる」ことであって、それを実現できるなら手段は問わないのです。変に C# にこだわると、この必要条件を満たせない可能性があります。

手段と目的を取り違えてはだめです。

投稿2018/09/17 05:52

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/09/17 05:57

ご指摘ありがとうございます。 > 手段と目的を取り違えてはだめです。 非常に共感します。ただ、今回のケースでは、あえて手段と目的を取り違えて(?)ます。 知りたい情報のあたりにコメントいただけると助かります。
tacsheaven

2018/09/17 06:04

目的は C# の勉強だというのなら、手段として Web コンテンツの更新、なんてものを持ち出すのが誤りです。 また、Web コンテンツの更新をあえて C# でやる、といっても、どんな更新機能を想定しているのかが見えない以上、アドバイスできるものではありません。 C# の勉強、という一般的な事柄に落とし込んだとしても、それなら世の中にはいろいろ書籍やサイトがありますから、それをまず読んで足りないところを補うしかありません。 ※Unity の関係で、ゲーム制作関連の情報が多い印象はありますけど
退会済みユーザー

退会済みユーザー

2018/09/17 06:10

Web コンテンツの更新は背景であって、「知りたい情報」ではありません。 一般的な学習において、効率よく学習したいと考え、その結果「知りたい情報」あたりが整理できると、学習効果が進むと判断して質問しました。 PHPer が C# を学ぶにあたって注意すべき箇所 デスクトップアプリ制作の勘所 採用すべきコーディング規約(フレームワーク デザインのガイドラインを今は読んでます) 学習に向いた参照すべき OSS 採用するパッケージの選定基準 あたりで、ご教示いただける情報があればお願いします。
guest

0

せっかくなので、備忘録を回答として切り出すことにしましたw
役に立った情報を、追記していきます。

備忘録
たいとるそのままw 逆説的に php との差分が把握できる。
PHPができても他言語の学習には役に立たない理由を考えてみた

少し古いけど、ツールまで含めた C# のエッセンス
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発

コーディングガイドラインの記事を見つけました。
C# コーディングガイドライン&プラクティス 2021 - Qiita
コメント欄で少し燃えてますが参考にはなると思います。

投稿2018/09/20 06:26

編集2021/11/26 03:09
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pepperleaf

2018/09/20 11:29

興味深いリンク、ありがとうございます。どちらも誇張はありますが、参考になります。 書き忘れたのですが、C#は静的言語なんで、コンパイル時に多くエラーがチェックされます。自分にとっては、これが楽ですね。 また、自分にとっては何に使うかが重要で、経理とかの事務系なのか、機械制御なのかで、使う機能(主な機能)が違うし、その分野の知識が必要とされるので、そっちが、大事って感じ。Web系は、美的センスが必要みたいで、できれば、関わりたくない、、なんて。
退会済みユーザー

退会済みユーザー

2018/09/20 12:29

> C#は静的言語なんで、コンパイル時に多くエラーがチェックされます。 コレって、あんまり意識してなかったんですけど、各所の記事を読むと、かなり大きな差みたいですね。 今はまだ実感できてないですけどw なんか良い記事あれば、追加していきます^^
guest

0

なんて横着な質問だと思ってみてたけど、ユーザースコア見て質問回答履歴を一覧だけどさらっと見たらなんでこんな質問してるんだろう?って疑問に思った

とりあえず、windowsの簡単なツール程度ならwormの方が手っ取り早いのは事実なんだけど、問題はwebformsくらいしか同じ雰囲気の使い方がなくて、WPFならUWPや多分Xamarin(自分は触ったことない)等、当分の間主流となる画面との連携を楽にしてくれる環境になるのでformはやらなくてもいい気がします
https://blog.okazuki.jp/entry/2014/12/27/200015
自分はWPFを始める際にここ見て色々試してみました
MVVMも規模が大きなものでないのならVVMでモデル抜きにしても良いかと

PHPのベテランということでおそらくはJSもそれなりに経験があると思いますので、LinqであればJSとの比較が良いかもしれません
https://mseeeen.msen.jp/linq-basic-for-javascript-programmers-1/
この辺りとか(自分は逆にC#からJSに置き換える方向で見ていますが)
ラムダ式もアロー関数でES2015だったか2016だったかから導入されているはずなので入りやすいんじゃないかとは思います
また、C#そのものであれば
https://ufcpp.net/
こちらのサイトを見ると良いかと思います
C#という言語だけでなく.NET FRAMEWORKも重要ですし(ただし4.8で打ち止めになって今後は.NET Coreのみになるらしい?)

C#は触れば触るほど好きになる言語らしいので、これを切っ掛けにC#主体になってもいいんですよ
ちなみに、C#はDelphi作った人が開発した言語で、C#の"#"は"+"4つが集まったものに見えるというのが理由らしいですなのでJAVAのコピーというよりもDelphiを元にC++の悪い点を改善して作ったって感じだと思います

投稿2018/09/17 15:16

len_souko

総合スコア1337

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/09/17 22:56

今から学習するなら、WPF のほうが良いよ。ってことですね。Windows Forms でしばらく楽しんでから手を出そうと思っていましたが、ちょっと差異を確認して優先度を上げてみます。 後半のご紹介頂いた記事、ちょうど JavaScript を再学習したところだったので、助かりました。ラムダ式とアロー関数は書くたびに違和感があったのですが、リンク先見ていろいろ納得できました。 むしろ JavaScript (と php)で記述する際の違和感解消が進みました^^; 今回の質問、C# の学習を始めるにあたって、アドバイスくれそうな方からアドバイスもらえるような書き方をしたので、ぱっと見横着な質問になってます。(実際、横着な質問ではあるのですがw)混乱させてしまって申し訳ありません。 回答大変ためになりました。ありがとうございます。
guest

0

まあ、spookybirdさんとほぼ、同意見なんですが、、。

Cをしばらくやって、C++をかじって、Javaも適当にやってきたら、C#も同類。
どっちかと言うと、.Netをどう使えるかの方が問題だったりとします。
どなたかのコメント(?)に、C#とVBの違いは、.Netの呼び出し方だけとあったけど、その通りと思う。 (個人的には VBよりも使い易いと思う。)

自分の場合、本、読んでもなかなか覚えられない、勉強会も同様。実際に必要になって使いだすとなんとかなっている感じです。言語仕様とかはほとんど斜め読み、と言うか、積読(Netの場合、リンクが増えるだけ)。独自用語も困った時、調べてます。(この辺、誤解されやすいですが、理屈に正しいより、使える方が大切でしょう)

・ツール(VS)に従って作ると、Form1.cs がどんどん大きくなって気持ち悪い

これは、大きくなったところで、機能とかでクラス分割を考える。

・this 省略したら、スコープがよく分からんくなるけど大丈夫?

これは慣れって気がします。ただ、Formの Size とか、Width とか、一般的過ぎて、this無しだと落ち着かないけど、VS が要らないって言ってくるので削除。

・モダンな書き方を参考にしたいけど、参考にすべきコードが分からん。

なにがモダンか私も分かりません。コーディングルールも同様。流行もあるので、あまり深入りしないようにしてます。

自分の記憶では、C# は、C++の代わりに Javaを使おうとしたが、著作権問題を回避するために、MSが作ったと記憶しています。(だから、Javaに似ている)

投稿2018/09/17 07:43

pepperleaf

総合スコア6383

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/09/17 09:54

実践寄りの回答ですね。ありがとうございます。 > 実際に必要になって使いだすとなんとかなっている感じです。 独学でやっているのでメンターもおらず、実際に必要な時に実務に耐えられる結果を出せず困っています^^; なんとかなってしまう pepperleaf さんの環境、羨ましいです。
pepperleaf

2018/09/17 10:28

コメント、ありがとうございます。 必要にならないとなかなか覚えないので、新しい仕事ネタになりません。最近、Pythonが人気らしいので、覚えようと思っているですが、もう一つ。仕方が無いので、ここの質問とかを動機づけにしようとしています。 また、Zuishinさんの回答/コメントはさすがと思いました。自分はまだ、そのレベルに達していないと。ただ、課題を解く(お仕事をする)場合、全てを知っている必要は無く、必要な範囲をカバーすれば、良いのではと考えています。完璧を求めなければ、なんとかなると言うのが、本音です。
pepperleaf

2018/09/17 12:50

> https://docs.python.jp/3/faq/design.html?highlight=switch 紹介ありがとうございます。 ただ、求めるものでは無いですね。言語仕様がなぜ、そうなったかは、使えるようになり、背景を説明する必要が生じた場合です。 私が C#使う時、一番、参照するのは、MSDNのサイト。(主に .NETの検索) 日本語が怪しいという問題はありますが、不明点はまず、本家で確認するようにしています。言語の差異はあまり悩まないようにしています。(悩んでもきりがない) C#ではこう書くと覚えるようにしています。 C#は、日本語で読めるドキュメントがあるだけ、良いと思います。(昔、既存コードとコンパイラだけで対応した言語もあります)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問