Saya seorang programmer Python yang belajar C # yang mencoba berhenti khawatir dan hanya suka C # untuk apa itu, daripada terus-menerus membandingkannya kembali ke Python.
Saya terjebak pada satu titik: kurangnya kesaksian tentang di mana hal-hal didefinisikan, sebagaimana dirinci dalam pertanyaan Stack Overflow ini . Singkatnya: di C #, using foo
tidak memberi tahu Anda nama dari foo
apa yang tersedia, yang analog dengan from foo import *
Python - bentuk yang tidak disarankan dalam budaya pengkodean Python karena tersirat daripada pendekatan yang lebih eksplisit dari from foo import bar
.
Saya agak terkejut oleh jawaban Stack Overflow untuk titik ini dari programmer C #, yang dalam prakteknya kurangnya kesederhanaan ini tidak terlalu penting karena dalam IDE Anda (mungkin Visual Studio), Anda dapat mengarahkan kursor ke nama dan diberi tahu oleh sistem dari mana nama itu berasal. Misalnya:
Sekarang, secara teori saya menyadari ini berarti ketika Anda sedang mencari dengan editor teks, Anda tidak dapat mengetahui dari mana jenis-jenis itu berasal dari C # ... tetapi dalam praktiknya, saya tidak menemukan itu menjadi masalah. Seberapa sering Anda benar-benar melihat kode dan tidak dapat menggunakan Visual Studio?
Ini wahyu bagiku. Banyak programmer Python lebih suka pendekatan editor teks untuk pengkodean, menggunakan sesuatu seperti Sublime Text 2 atau vim, di mana itu semua tentang kode, ditambah alat-alat baris perintah dan akses langsung dan manipulasi folder dan file. Gagasan untuk bergantung pada suatu IDE untuk memahami kode pada tingkat dasar seperti itu tampaknya merupakan kutukan. Tampaknya budaya C # secara radikal berbeda pada titik ini. Dan saya bertanya-tanya apakah saya hanya perlu menerima dan menerima itu sebagai bagian dari pembelajaran saya tentang C #.
Yang mengarahkan saya ke pertanyaan saya di sini: apakah pengembangan C # secara efektif tidak dapat dipisahkan dari IDE yang Anda gunakan?
using MyType = MyNamespace.MyType;
?global::
dan bekerja dengan cara Anda dari sana.using
tidak menyediakan apa pun yang sebelumnya tidak tersedia; itu hanya membuatnya lebih mudah diakses (seperti dalam mengetik kurang diperlukan untuk menggunakan kelas tertentu).Jawaban:
Visual Studio sangat nyaman sehingga setelah bekerja dengannya sebentar sulit menggunakan IDE yang berbeda. Ini memiliki banyak alat praktis dan banyak plugin yang tersedia, sehingga praktis memiliki setiap fitur yang Anda perlukan.
Di sisi lain, apa pun bahasa yang Anda pelajari, disarankan untuk menggunakan baris perintah di awal, sehingga Anda bisa lebih memahami cara kerjanya. C # bukan pengecualian.
Secara teoritis tidak, tetapi praktis ya. Dimungkinkan untuk menulis dalam C # menggunakan editor teks dan baris perintah, tetapi jika Anda memiliki Visual Studio, Anda tidak akan pernah melakukan ini. Sebenarnya sangat sedikit programmer yang pernah mengeksekusi kode C # dari baris perintah.
BTW Jika Anda merasa tidak nyaman dengan
using foo
, Anda dapat menggunakan seluruh jalur saat menggunakan suatu tipe.sumber
Ini bukan masalah memahami kode Anda: diberikan waktu yang cukup, Anda selalu dapat menemukan variabel yang tepat dengan editor teks dasar atau bahkan dalam cetakan. Sejauh memahami kode, ketergantungan IDE benar-benar tidak ada.
Menemukan referensi Anda secara efisien adalah subjek yang sama sekali berbeda: Saya suka kemampuan untuk menemukan penggunaan variabel Java di Eclipse sebanyak saya suka menemukan poin deklarasi di Visual Studio, untuk C # dan C ++. Saya lebih suka menghabiskan waktu saya coding, daripada mencari poin deklarasi secara manual. Ini mirip dengan melakukan matematika: Saya bisa melipatgandakan angka multidigit pada selembar kertas, tetapi saya lebih suka menggunakan kalkulator untuk menghemat satu atau dua menit.
Mulai dari "ukuran kritis" tertentu dari kode, IDE yang baik menjadi sangat berguna terlepas dari bahasa pemrograman. Ukurannya dapat bervariasi dari bahasa ke bahasa, tetapi begitu Anda melewati beberapa ribu baris, memiliki IDE dapat membantu terlepas dari bahasa Anda. Ini lebih berkaitan dengan keterbatasan pikiran manusia daripada dengan bahasa pemrograman tertentu: pada titik tertentu, memori jangka pendek Anda terikat dengan "meluap".
Ada trik yang memungkinkan Anda meningkatkan ukuran kritis di mana IDE menjadi berguna. Misalnya, Anda dapat mengikuti konvensi penamaan (nama-nama Hongaria besar di dunia C ++ di beberapa titik, terutama di kalangan praktisi Windows). Trik umum lainnya adalah mengkualifikasi variabel instan dengan
this.
bahkan dalam konteks di mana kualifikasi tersebut tidak diperlukan.Trik-trik ini datang dengan kompromi: hampir pasti, mereka membuat program Anda kurang mudah dibaca dengan mengaburkan nama, atau menyisipkan referensi eksplisit yang ingin disembunyikan oleh enkapsulasi. Dihadapkan pada pilihan, saya memilih kode yang tampak bersih plus sebuah IDE dari pada kode yang kurang bersih minus sebuah IDE. Namun, saya sepenuhnya menyadari bahwa pilihan orang lain mungkin berbeda dari pilihan saya.
sumber
this
istimewa - tetapi pengkodean bukanlah seni yang terisolasi dan saya pikir yang terbaik adalah mengikuti (atau setidaknya mulai dengan) norma-norma budaya pengkodean - yaitu menjadi "Pythonic" dengan Python dan apa pun yang setara "C # way" dengan C #. Dan jelas dari jawaban dan komentar di sini bahwa menggunakan IDE yang bagus seperti Visual Studio adalah pusat dari "C # way" (jika itu cara yang tepat untuk menjelaskannya).Itu bagus, tapi itu melewatkan inti dari VS IDE. Inti dari IDE seperti VS adalah dukungan pengembangan cepat melalui alat kode yang kuat seperti refactoring dan intellisense. VS adalah editor yang sangat baik untuk kode C #.
Sekarang C # memungkinkan Anda membuat kode dengan gaya yang bergantung pada IDE-nya secara lebih luas (Anda dapat menggunakan banyak
var
kata kunci dan sejenisnya). Beberapa orang lebih suka untuk lebih eksplisit, misalnya dengan menggunakan alias namespace untuk menjadi jelas di mana namespace milik kelas (sepertiimport
di Jawa atau Python). Itu lebih dari pilihan gaya pengkodean daripada fitur bahasa.Karena C # diketik secara statis (walaupun dengan beberapa ekstensi dinamis, mulai v4) selalu cukup mudah untuk mengetahui jenis apa yang dirujuk - jika salah kode tidak akan dikompilasi, dan VS bukan satu-satunya IDE dengan dukungan untuk C # intellisense. Mungkin itu yang terbaik.
Mengembangkan C # tanpa IDE yang kuat (seperti VS) agak seperti memalu kuku dengan tangan ketika Anda sudah memiliki bagian atas kisaran nailgun - mungkin ada waktu aneh yang perlu Anda lakukan, tetapi para profesional menggunakan alat yang tepat untuk pekerjaan itu .
Saya akan mengatakan hal yang sama mungkin juga berlaku untuk Jawa. Jika ada IDE yang kuat dengan intellisense dan alat kode refactor di luar sana Anda mungkin harus menggunakannya.
Namun, lihatlah sebaliknya - jika Anda tidak ingin intellisense, kompilasi pemeriksaan kode waktu dan analisis-kode / refactoring maka IDE yang membengkak bukanlah cara untuk pergi, dan tidak ada bahasa yang diketik secara statis. Saya pikir itu sebaliknya:
Kupikir:
sumber
Untuk menjawab pertanyaan Anda: meskipun perlahan berubah, lingkungan pengembangan Microsoft sebagian besar merupakan monokultur .
Pendekatan ini memiliki banyak sisi positif dan negatif, yang dapat diperdebatkan secara panjang lebar (misalnya mempertimbangkan pro dan kontra platform terbuka dan tertutup, seperti PC vs Xbox), tetapi pada akhirnya, tooling dari Microsoft adalah yang paling orang-orang menggunakan. Perusahaan juga telah menunjukkan bahwa pengambilan keputusan mereka sering semacam "memberikan nilai yang paling untuk mayoritas pengguna kami" proses, selalu mencari kompromi praktis (paling baru - menganggap Naskah yang diketik ). Jadi pada dasarnya, saya tidak akan terkejut menemukan bahwa pengembangan C # telah / dilakukan dengan tooling (VS) dalam pikiran.
sumber
Untuk satu, C # bukan Python .. Ada metodologi desain yang berbeda.
Sekarang, untuk menjawab pertanyaan Anda, sangat mungkin untuk menggunakan pernyataan Python-esque Anda menggunakan.
Hanya saja itu jelas bukan norma karena hampir tidak mudah. Namun, saya pikir Anda tidak perlu khawatir tentang tahu persis di mana tepatnya masing-masing kelas berasal. Saya tidak mengerti seluruh titik melakukannya dengan cara ini di Python.
Dan juga, C # adalah bahasa yang cocok untuk menggunakan IDE agar lebih mudah. Intellisense sangat sederhana untuk diimplementasikan, terutama dibandingkan dengan bahasa dinamis seperti Ruby dan Python. Namun, Anda tidak harus terjebak pada IDE Anda. Saya pernah mendengar orang menggunakan Eclipse. Ada juga tentu saja MonoDevelop (yang saya gunakan cukup banyak), dan Anda bahkan dapat bekerja dari baris perintah. Pada server saya kadang-kadang, saya akan mengedit file C # dengan
vi
dan kemudian menggunakanxbuild
untuk membangunnya kembali ... Hanya saja menggunakan IDE membuat segalanya lebih mudah dibandingkan dengan baris perintah untuk kasus-kasus tertentu.sumber
Adakah yang mau membaca di sini ??
Saya meringkas dengan mengatakan fungsionalitas IDE yang masif yang kompleks sangat diperlukan dan akan (harus) berevolusi menjadi Zen VimNess Sublime suatu hari nanti ....
Perangkat lunak kami adalah 129 proyek dengan sekitar 2M LOC. Tambahkan kekerangkauan dari kerangka NET. Dan diberikan ini yang bisa saya katakan adalah IDE sangat penting, melampaui motivasi pertanyaan thread ini.
Wawasan ke dalam Pangkalan Kode
Periode. Anda tahu jenis fitur yang sedang kita bicarakan; kecuali bahwa kenyamanannya menjadi sangat diperlukan dan esensial dengan jenis basis kode yang saya tangani.
Saya menulis kode yang lebih baik karena IDE. Saya selalu menambahkan pesan khusus ke tes Nunit saya karena mudah, cepat dan akurat. Saya menyukai enumerasi daripada string karena sebagian besar ke intellisense. Saya tidak ragu untuk menggunakan penamaan deskriptif / panjang - pernyataan multi-baris dibuat cepat dan bersih.
Tetapi bahkan kecerdasan ini terkadang terlalu banyak. Saya sering menggunakan pencarian teks "temukan dalam file" yang lama.
Bantuan pengkodean
Di sinilah aku sering menangis "cukup!". Bayangkan layar penuh dengan selusin warna yang sebagian besar tidak jelas, beberapa variabel tertentu disorot di mana-mana, sorot penjepit mengaburkan apa sebenarnya penjepitnya, berlekuk-lekuk menggarisbawahi di mana-mana karena "ia" ingin saya menulis literatur bukan kode, ikon untuk menu konteks Resharper (Anda cukup klik saja! abaikan saja), tanda tangan bantuan popup yang membentang 2/3 layar secara horizontal, secara vertikal menampilkan beberapa kelebihan, sebuah popup karena di mana Anda kebetulan meninggalkan kursor mouse .... Saya bahkan tidak dapat melihat & ^!% baris * s * kode yang saya kerjakan!
Vis.Stud. perlu merangkul minimalis sehingga saya bisa fokus pada pengkodean dan tidak melalui ratusan (ribuan jika Anda menghitung setiap pengaturan pengkodean warna dan semua plugin itu) dari pengaturan dalam pertempuran yang hilang untuk merebut kembali kewarasan. Sebuah " Pareto " kunci akan menjadi besar.
sumber
Tentu saja tidak. Mengapa Anda tidak mengimpor seluruh namespace? Pilihan menggunakan IDE atau editor teks terintegrasi tidak ada hubungannya dengan itu. Mengimpor seluruh namespace tidak membuatnya lebih sulit untuk membaca kode atau menggunakannya.
Ingat, C # adalah bahasa yang diketik. Jika Anda mengimpor beberapa ruang nama dengan kelas yang sama Anda akan mendapatkan kesalahan kompilasi.
Saya pribadi tidak menggunakan tipe deklarasi sebanyak itu. Alih-alih, saya menggunakan
var
kata kunci sebagai ganti alasan yang saya jelaskan di sini: http://blog.gauffin.org/2012/08/to-var-or-not-to-var-is-that-really-the-question/sumber
msdn <classname>
dan klik tautan pertama. Di sana Anda mendapatkan namespace juga.Pemahaman saya adalah bahwa dengan Python, "semuanya publik" atau semacamnya. Dalam C #, perancang modul memutuskan apa yang publik dan apa yang tidak, jadi ketika Anda melakukannya,
import
Anda hanya mendapatkan API publik. Itu bisa menjadi alasan perbedaan yang Anda gambarkan.sumber
Pada pekerjaan saya sebelumnya saya kebanyakan menggunakan vim untuk kode dalam bahasa seperti C #, JavaScript, Powershell, Perl, C ++, dan beberapa pengembang dulu melakukan hal yang serupa. Proyek itu terlalu besar untuk Visual Studio.
Yang mengatakan, sebagian besar pengembang C # berurusan dengan proyek yang jauh lebih kecil dan cukup senang menggunakan VS.
sumber
Ini adalah pandangan yang menarik tentang pengembangan C #. Apa yang Anda tanyakan melampaui C #, jika Anda bertanya tentang IDE.
Seperti yang Anda katakan, dengan Python, Anda dapat menggunakan berbagai editor untuk menulis kode Anda. Anda bisa melakukannya dengan framework .NET juga. Ada juga alat IDE lain yang dapat Anda gunakan seperti SharpDevelop. Visual Studio sangat erat dikembangkan bersama dengan .NET framework dan relatif mahal. Alat-alat seperti SharpDevelop dan versi "Express" dari VS ada untuk menarik lebih banyak pengembang untuk menggunakan .NET. Intinya semua yang dilakukan IDE untuk Anda adalah menyediakan lingkungan yang terorganisir, biasanya dengan intellisense, add-ons untuk produktivitas dan "penolong" untuk mengumpulkan apa yang akhirnya menjadi baris perintah yang tampak sangat menakutkan untuk diteruskan ke kompiler Anda. Hal yang sama berlaku untuk Java, alat seperti Eclipse hanya menyediakan peningkatan produktivitas dan organisasi bagi kami. Di bawah tenda, tidak ada yang ajaib terjadi sampai Anda membangun atau menyusun proyek Anda dan rasa hormat itu,
Ketika Anda berbicara tentang pernyataan "menggunakan" dalam C # dan membandingkannya dengan Python, itu tidak benar-benar hal yang sama terjadi di bawah tenda. Pernyataan menggunakan digunakan oleh kompiler untuk membantu upaya itu dalam mengubah kode C # menjadi MSIL. Di MSIL, tidak ada arahan "impor semua kelas ini dari namespace ini". Dengan kode waktu berada di tingkat MSIL, semua kelas telah ditandai dengan nama mereka yang sepenuhnya memenuhi syarat. Pernyataan "menggunakan" dan "impor" ini untuk membantu keterbacaan manusia. Mereka bukan perintah optimisasi kompiler. Setelah semua "penandaan nama yang memenuhi syarat" awal ini telah berjalan, mungkin ada semacam "minify" tingkat rendah untuk FQNs tetapi ini adalah untuk membantu kompiler / juru bahasa untuk mengeksekusi lebih cepat.
Satu perbedaan mendasar terakhir antara semua bahasa yang disebutkan di sini adalah bahwa beberapa dari mereka ditafsirkan oleh VM, beberapa ditafsirkan gaya JIT dan beberapa sepenuhnya dikompilasi. Bagaimana arahan penggunaan ini diterapkan di semua kompiler dan juru bahasa itu sangat berbeda.
HTH.
sumber
Saya pikir secara historis jawabannya cukup banyak, ya - mendapatkan pengembangan C # dan berjalan secara efektif dalam apa pun di luar Visual Studio, Xamarin, atau SharpDevelop adalah pengalaman yang tidak menyenangkan.
Tetapi baru-baru ini banyak proyek telah muncul yang membuatnya lebih mudah, misalnya:
OmniSharp , menyediakan fondasi untuk intellisense dan refactoring, bersama dengan vim, emacs, atom, dan plugins yang sublim. Saya belum benar-benar menggunakannya, jadi saya tidak tahu seberapa baik kerjanya, tetapi itu terlihat menjanjikan.
Generator Ye. ASP.NET MVC , membantu mem-bootstrap proyek MVC baru (mungkin ada generator lain).
paket , sebuah alternatif untuk NuGet di mana Anda benar-benar dapat menambahkan paket NuGet ke proyek Anda dari baris perintah, dan memiliki file .csproj Anda diperbarui (walaupun ada alat baris perintah NuGet, sebenarnya memperbarui proyek untuk menggunakan paket adalah bagian dari IDE integrasi, bukan alat baris perintah).
Paket memiliki implikasi bahwa Anda harus mengadaptasi kode sumber Anda untuk menggunakannya - jadi jika Anda duduk sebagai anggota tunggal dalam sebuah tim dan ingin menggunakan editor teks untuk pengkodean, dan semua orang menggunakan Visual Studio, Anda harus meyakinkan semua orang lain untuk menyesuaikan solusi dengan kebutuhan Anda :(
Jadi, Anda harus bisa bangun dan berjalan, tetapi ada lebih banyak pekerjaan yang harus dilakukan untuk membuat rantai alat Anda berjalan dan efisien.
sumber
Tidak lagi:
http://www.omnisharp.net/
Saya telah menguji ini dengan subime3 dan osx
Lebih banyak sampel di
http://blog.jonathanchannon.com/2014/11/12/csharp-first-class-citizen-sublime-text/
sumber