Masalah yang saya miliki, adalah bahwa sebagian besar buku C ++ yang saya baca menghabiskan hampir selamanya untuk sintaks dan dasar-dasar bahasa, misalnya for
dan loop while
, array, daftar, pointer, dll.
Tetapi mereka tampaknya tidak pernah membangun apa pun yang cukup sederhana untuk digunakan untuk belajar, namun cukup praktis untuk membuat Anda memahami filosofi dan kekuatan bahasa.
Kemudian saya menemukan QT yang merupakan perpustakaan yang luar biasa!
Tetapi bekerja melalui demo yang mereka miliki, sepertinya saya sekarang berada dalam dilema terbalik. Saya merasa seperti anak lelaki kaya mengendarai mobil sport yang disubsidi oleh ayah. Seperti saya bisa membangun perangkat lunak yang fantastis, tetapi tidak tahu apa yang terjadi di bawah tenda.
Sebagai contoh dilema saya mengambil tugas membangun browser web sederhana. Dalam C + + murni, saya bahkan tidak tahu harus mulai dari mana, namun dengan perpustakaan Qt dapat dilakukan dalam beberapa baris pada kode.
Saya tidak mengeluh tentang ini. Saya hanya ingin tahu bagaimana mengisi kekosongan pengetahuan antara struktur dasar bahasa dan antarmuka tingkat tinggi yang disediakan kerangka Qt?
sumber
Jawaban:
Apakah Anda ingin tahu bagaimana menginjak pedal gas membuat mobil melaju lebih cepat, atau apakah Anda hanya peduli bahwa menginjak pedal gas membuat mobil melaju lebih cepat?
Anda melihat manfaat dari pemrograman kotak hitam, yang merupakan cara terbaik untuk merancang sistem ketika semua kotak bekerja. Seseorang harus membuat kotak hitam dan jika Anda ingin menjadi pria / wanita maka Anda perlu tahu lebih banyak tentang bahasa daripada pria yang menggunakan kotak.
Ada pekerjaan yang merupakan pekerjaan bagus di setiap gaya, jadi terserah Anda apa yang ingin Anda programkan. IMO Anda akan merugikan diri sendiri meskipun jika Anda tidak melakukan upaya untuk mengupas beberapa abstraksi QT memberi Anda pada akhirnya.
sumber
Kerusakan paling besar yang akan Anda lakukan untuk diri sendiri, jika Anda ingin mengatakannya, adalah bahwa Anda tidak akan belajar menggunakan struktur data C ++ standar, iterator, algoritma dan string sama sekali. Qt memiliki perpustakaan sendiri untuk semua keperluan itu, dan Anda semua terpaksa menggunakannya bukan entitas C ++ standar karena Qt API hanya menerima struktur data sendiri.
Orang bisa berpendapat bahwa belajar menggunakan satu perpustakaan algoritma setelah menguasai yang lain adalah tugas yang sepele. Sebelum pergi ke sebuah wawancara di mana pewawancara mengharapkan Anda untuk menguasai C ++, pastikan Anda berurusan dengan hal-hal sepele sebelumnya.
sumber
Mempertimbangkan bahwa Qt memiliki meta-compiler sendiri yang harus Anda proses dengan file sumber Anda, sulit untuk menganggap kode Qt sebagai "hanya C ++".
Tetapi yang lebih penting, gaya C ++ yang digunakan dan didorong Qt adalah sesuatu yang, bagi kita semua, terakhir terlihat sekitar 1995.
Sungguh, ini merupakan upaya untuk membuat C ++ sebagai Java-like sedapat mungkin. Itu merindukan, atau mengecilkan hati, semua hal menakjubkan yang benar-benar membuat C ++ layak digunakan hari ini . Sebagai gantinya, Anda dikunci ke dalam subset yang sebagian besar terasa seperti Java yang lebih rendah.
Jadi jika tujuannya adalah untuk belajar C ++, saya akan mengatakan tidak, menjauhlah dari Qt. Mungkin perhatikan Boost sebagai gantinya, jika Anda ingin menggunakan pustaka yang mapan sebagai titik awal. Boost mewujudkan praktik-praktik yang dianggap baik hari ini .
Tapi jujur, jika Anda ingin belajar bahasa C ++ , maka ambil buku teks yang bagus, dan fokus pada bahasa tersebut .
Menulis peramban web, apa pun yang Anda lakukan, paling tidak akan mengajarkan Anda tentang peramban web. Itu tidak akan mengajarkan banyak tentang bahasa yang Anda gunakan.
C ++ sebagai bahasa tidak memiliki kelas WebBrowser bawaan. Jika Anda membaca standar C ++, ia tidak mengatakan apa - apa tentang peramban. Bahkan tidak menyebutkan aplikasi GUI.
Itu karena hal-hal itu dibangun di atas, disediakan oleh perpustakaan seperti Qt. C ++, seperti bahasa pemrograman apa pun, adalah tentang logika, tentang cara mengekspresikan logika itu. Dan ya, itu berarti bekerja dengan array dan pointer dan loop dan semua hal itu.
Apakah Anda dapat menulis peramban web hanya dengan menggunakan alat bawaan itu , diberikan waktu yang cukup ? Apakah Anda tahu cara mengekspresikan logika program yang terlibat? Jika tidak, maka Anda perlu menghabiskan lebih banyak waktu untuk loop dan pointer, dan lebih sedikit menelepon
new QWebKit()
dan hanya membonceng perpustakaan yang sudah jadi."Filosofi dan kekuatan bahasa" ada dalam array dan daftar dan loop, bukan di browser web.
sumber
Mungkin.
Saya harus melihat kode yang Anda masukkan ke penangan acara Anda.
Sungguh, jangan terobsesi dengan seberapa banyak Anda "tahu". Kita semua menggunakan kerangka kerja windowing dan kita semua masih belajar. Teruslah koding / baca hal-hal baru dan Anda akan terus belajar C ++. Mempelajari kerangka kerja windowing baru adalah tambahan yang bagus untuk keterampilan Anda, bahkan jika itu tidak berarti Anda dapat mengimplementasikan jaringan saraf atau quicksort di C ++.
sumber
Jangan khawatir; pada awalnya sebagian besar kode Anda hanya akan menggunakan kerangka kerja, tetapi setelah beberapa saat Anda harus memperpanjangnya , meskipun hanya sedikit. Maka Anda harus menggunakan lebih banyak C ++.
Juga ingat bahwa Anda memiliki seluruh sumber Qt yang tersedia, IDE dengan senang hati akan membawa Anda ke definisi fungsi / metode / kelas yang Anda inginkan. Semakin dalam Anda pergi, semakin banyak C ++ yang akan Anda lihat.
Yang lain telah menyebutkan tentang perbedaan antara Qt C ++ dan standar C ++. Ini jatuh di dua kubu:
pustaka yang berbeda: Qt mencakup semua kontainer yang biasa: array, daftar, set, hashmaps, dll. Mereka cocok dengan sangat baik dan implementasi yang baik, tetapi mereka bukan varietas STD. Namun, dalam versi terbaru (4.1 dan yang lebih baru, saya pikir) mereka memiliki API 'seperti STD' selain variasi lama (dan API mirip Java). Pada akhirnya, pilihan desain (kapan harus menggunakan array, kapan harus menggunakan hashmap) adalah sama, jadi mengubah ke STD untuk proyek-proyek non-Qt tidak terlalu sulit.
moc
penambahan sintaksis: kebanyakan untuk penanganan sinyal, tetapi juga beberapa konstruksi loop yang lebih bagus. Banyak orang merasa alat ini berarti bukan C ++ lagi; tapi IMHO, mereka merasa seperti makro yang sedikit lebih pintar. Penanganan sinyal yang digabungkan dengan longgar merupakan keuntungan besar dari kerangka kerja yang baik, dan sangat sulit dilakukan pada bahasa yang diketik secara statis. Di C ++ modern, ini bisa dilakukan dengan template dalam dosis besar; tapi itu jauh dari standar ketika Qt pertama kali didapatmoc
. Pada akhirnya, jika nanti Anda ingin melakukan proyek non-Qt, periksa dulu apakah Anda akan menggunakan kerangka kerja apa pun dan apakah ada sinyal. Jika ya, maka sebagian besar yang biasa Anda lakukan dengan Qt akan berlaku, jadi tidak ada 'salahnya' dalam mempelajari Qt terlebih dahulu.sumber
moc
?foreach
hanyalah makro .... (sebenarnya "alias" untukQ_FOREACH
didefinisikan dalam<Qt/qglobal.h>
). Saya tidak berpikir itumoc
sedang memprosesnya. Dan C ++ 11 memilikifor (auto it : container)
konstruk!Qt digunakan secara luas di dunia komersial karena menyediakan toolset lintas platform penuh dan lingkungan pengembangan, termasuk perpustakaan GUI yang baik.
Ini juga sepenuhnya mendukung internasionalisasi, termasuk alat 'Ahli Bahasa' yang sangat baik.
Jika Anda merencanakan karier akademik maka saya tidak akan repot dengan Qt. Jika, di sisi lain, Anda menyukai C ++ dan ingin belajar keterampilan yang berharga maka Qt patut dipelajari.
Dan ya, Qt adalah C ++, dan Anda dapat mencampur standar dan meningkatkan pustaka ke konten Anda jika itu membuat Anda merasa lebih baik.
sumber
Adalah ide yang buruk untuk mempelajari C ++ sampai Qt. Pertama, Anda harus mempelajari konsep bahasa yang independen dari kerangka kerja apa pun dan itulah yang akan diajarkan oleh c ++ buku kepada Anda dan mereka benar. Pada dasarnya, 'for dan loops while, array, list, pointer' adalah bahasa pemrograman. Fungsionalitas tambahan disediakan oleh kerangka kerja. Setelah Anda belajar bahasa pemrograman, Anda dapat mempelajari kerangka kerja seperti Qt atau MFC yang dibangun menggunakan bahasa tersebut, sehingga aplikasi dapat dikembangkan dengan cepat. Mengenai Qt, setelah Anda belajar c ++, itu adalah kerangka kerja yang sangat baik yang membuat Anda sama produktifnya dengan pengembang Java atau .Net apa pun. Sebentar lagi Anda akan dapat mengembangkan aplikasi iOS dan Android menggunakan Qt.
sumber
Yah, saya pikir cara terbaik untuk belajar C ++ adalah dengan menggunakan sintaks HANYA sendiri (Standar C ++), jadi Anda akan dapat menggunakan hal-hal LANGUAGE, dan BUKAN Qt (atau kerangka kerja lain, perpustakaan ... dll).
Mengapa? karena sebagai seorang pemula, ketika Anda melihat kode C ++ yang dicampur dengan kode Non-C ++ lainnya (Qt dalam kasus ini) Anda tidak akan dapat melihat apa hal-hal C ++ dan apa yang tidak, melainkan akan menjadi proses yang lebih kompleks.
sumber