C - C++
Nasıl Daha Sade, Daha Anlaşılabilir Ve Daha Verimli Kod Yazılır ? (C Dili)
Nasıl Daha Sade, Daha Anlaşılabilir Ve Daha Verimli Kod Yazılır ? (C Dili)
-
Merhabalar. Yeni bir C öğrenme konusuyla karşınızdayım. Okuduğum kitap Programming In C (Stephen G Kochan).
Bir chapterin sonundaki egzersizleri yaparken bir şey farkettim. Yazarın egzersize cevap olarak verdiği kodlar ile kendi yazdıklarım arasında bir fark var. O da şu ki; yazarın yazdığı kodlar daha verimli, anlaşılır
ve sade gözüktü bana. Benimkiler pek öyle gözükmüyor.
Bu işin belli criterleri mi var (mesela atıyorum for kullanamaya özen göster gibi ) , yetenekle falan mı alakalı yoksa bu şekilde kod yazabilmek için iyi tecrübe edinmek mi gerekiyor ?Mesela: egzersizlerde benden bir fonksiyon yazmam istendi bende yazdım. Ama sonuçları yazarkiyle karşılaştırınca onunki daha verimli duruyordu. Egzersiz şu :
Write a function called insertString to insert one character string into another string.The arguments to the function should consist of the source string,the string
to be inserted,and the position in the source string where the string is to be inserted.So,the call
insertString (text, "per", 10);
with text as originally defined in the previous exercise,results in the character string "per" being inserted inside text,beginning at text[10].Therefore,the character string "the wrong person" is stored inside the text array after the function returned.
ve benim yazdığım kodlar şurada :
#include<cs50.h> #include<stdio.h> int counter(const char b[]) { int i; int counter = 0; for (i = 0; b[i] != '\0'; i++) { counter++; } return counter; } void insertStrings( char source[], char string[], const int position) { int i; int count = 0; //counts string that you would like to place int j; for(i = 0; source[i] != '\0'; i++) { if ( i == position) { for(j = position; string[count] != '\0' && position <= counter(source) ; j++) { source[j + counter(string)] = source[j]; // shift the source string. source[j] = string[count]; //place your string into source string. count++; } } } } int main() { char sourceS[] = "the wrong son"; char stringS[] = "per"; const int positionN = 10; int i; insertStrings(sourceS, stringS, positionN); for(i = 0; sourceS[i] != '\0'; i++) { printf("%c", sourceS[i]); } printf("\n"); return 0; }
Yazarın kodları ise bu ( main v.b. yer kaplamasın diye sadece insertstring fonksiyonunu veriyorum) :
/* insert string s into string source starting at i This function uses the stringLength function defined in the chapter. Note: this function assumes source is big enough to store the inserted string (dangerous!) */ void insertString (char source[], char s[], int i) { int j, lenS, lenSource; /* first, find out how big the two strings are */ lenSource = stringLength (source); lenS = stringLength (s); /* sanity check here -- note that i == lenSource effectively concatenates s onto the end of source */ if (i > lenSource) return; /* now we have to move the characters in source down from the insertion point to make room for s. Note that we copy the string starting from the end to avoid overwriting characters in source. We also copy the terminating null (j starts at lenS) as well since the final result must be null-terminated */ for ( j = lenSource; j >= i; --j ) source [lenS + j] = source [j]; /* we've made room, now copy s into source at the insertion point */ for ( j = 0; j < lenS; ++j ) source [j + i] = s[j]; }
-
Adam sadece tek satırlık ifadeler için parantez açmamış ve aynı türdeki değişkenleri tek satırda yazmış hocam. Onun dışında pek bir şey yok ki ? Bunun dışında C'de belli standartlar var zamanla oturuyor bu. C ile geliştirilmiş açık kaynak projeleri inceleyebilirsin mesela github adamların kodu inci gibi okurken zevk alıyor insan.
-
Türkiyede çalışacaksan Sadece kodu yaz F5 'e bas çalışıyor mu kontrol et çalışıyorsa okey çalışmıyorsa dön bidaha bak hatalara.
Yurt dışı hedefin varsa. Yazdığın fonksiyonların param'larına bile isim açıklama ekle JAVA/C# için konuşuyorum C de varmı bilmiyorum ama..
Her fonksiyon üstüne acıklama yaz.
Açıklama önemli...
Fantastik kod yazımlarından kaç
if else yaparken ? kullanma kafa karıştırıcı okunabilirliği azalır. { - } blokları kesinlikle olsun bu da keza okunabilirliğini kolaylaştırır ve yarın öbürgün yaptığın projeyi geliştirmeye kalkınca " Yow ben bu kodu hangi kafayla yazdım bu ne la burda ne demek istedim acep " dersin :D
struct isimleri _Deneme gibi yapabilirsin kendine göre bir Syntax olutşrabilirsin değişken isimlerinde. Toplama_Islemi ToplamaIslemi toplamaIslemi _toplamaIslemi vs vs gibi.... Kendi kriterlerin olsun buda okunabilirliği arttırr.
Saçma sapan değişken isimleri verme hocam int a ; int a1; int a2 gibi gibi...
Bunlar benim sövdüğüm konular aklıma başka bişey gelmedi
-
C/C++ öğrenirken, öğrenmen gereken ilk adım:
C/C++ konusunda herkes sana yardımcı olamaz.
Quora, Stack Overflow, GitHub gibi siteleri ve C/C++ konusunda dünya çapında kabul görmüş kitapları yazan kişileri C/C++ konusunda 'otorite' olan kişileri takip et.
Ya da en azından 10 yıl C/C++ tecrübeli programcıları takip et sorularını onlara sor.
Herkes anlayamıyor maalesef. Özellikle de Java/C# dillerinden başka dil kullanmamış, İŞARETÇİ lerden laçabildiği kadar kaçmış kişiler C++ dan zerre anlamıyorlar zaten. Uzak dur.
C++ çok farklı bir dil. Java/C# çok ayrı bir dünya C++ çok ayrı bir dünya.
F-35, Curiosity, uyduların falan programlandığı dil bu sebeple çok farklı.
C/C++ konusunda sana yapabileceğim tek öneri bu maalesefe.
-------------------------------------
C/C++ dillerinden ayrı olarak genel programlama konseptleri dahilinde şu kitabı önerebilirim:
https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882
-
https://www.youtube.com/watch?v=OqIOQNfPebk
-
SkynetX bunu yazdı
C/C++ öğrenirken, öğrenmen gereken ilk adım:
C/C++ konusunda herkes sana yardımcı olamaz.
Quora, Stack Overflow, GitHub gibi siteleri ve C/C++ konusunda dünya çapında kabul görmüş kitapları yazan kişileri C/C++ konusunda 'otorite' olan kişileri takip et.
Ya da en azından 10 yıl C/C++ tecrübeli programcıları takip et sorularını onlara sor.
Herkes anlayamıyor maalesef. Özellikle de Java/C# dillerinden başka dil kullanmamış, İŞARETÇİ lerden laçabildiği kadar kaçmış kişiler C++ dan zerre anlamıyorlar zaten. Uzak dur.
C++ çok farklı bir dil. Java/C# çok ayrı bir dünya C++ çok ayrı bir dünya.
F-35, Curiosity, uyduların falan programlandığı dil bu sebeple çok farklı.
C/C++ konusunda sana yapabileceğim tek öneri bu maalesefe.
-------------------------------------
C/C++ dillerinden ayrı olarak genel programlama konseptleri dahilinde şu kitabı önerebilirim:
https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882
kalın kısma katılıyorum. Ayrıca C için pratiği öğrenmek, temiz kod yazmak, temel algoritmaları uygulamak ve gerçek uygulamalardan örnek görmek için benim de şu an okuduğum bir kitabı şiddetle tavsiye ederim: The Practice of Programming - Brian Kerninghan & Rob Pike
Adamlar şiir gibi yazıyorlar.
-
Tek tek teşekkür ederim herkese. Bir ikincisi de ilerleyen zamanlarda C++ 'nın kulllanım alanının azalacağını ve o yüzden fazla üstüne düşülmemesi gerektiğini duydum.
O yüzden C yi tam anlamıyla öğrendikten( yapabilirsem) Java ile devam etmeyi düşünüyorum. Sizin fikirleriniz nedir ?
balbazar tarafından 12/Oca/17 17:41 tarihinde düzenlenmiştir
Edit: SkynetX hocam bu arada yurtdışında düşünüyorum. Uzun süre Türkiye'ye uğramayı düşünmüyorum şöyle bir 8-9 sene kadar -
balbazar bunu yazdı
Tek tek teşekkür ederim herkese. Bir ikincisi de ilerleyen zamanlarda C++ 'nın kulllanım alanının azalacağını ve o yüzden fazla üstüne düşülmemesi gerektiğini duydum.
O yüzden C yi tam anlamıyla öğrendikten( yapabilirsem) Java ile devam etmeyi düşünüyorum. Sizin fikirleriniz nedir ?
Edit: SkynetX hocam bu arada yurtdışında düşünüyorum. Uzun süre Türkiye'ye uğramayı düşünmüyorum şöyle bir 8-9 sene kadarHocam ben C ile yazarım ve biraz dil ırkçılığı mevcut bende. Bir C yazılımcısı olarak ne yazık ki Türkiye'de iş bulmak sıkıntılı ve aşırı moral bozucu bu C/C++ ın kullanım alanının azalacağı anlamına gelmiyor. Günümüzde halende kritik alt yapılar ve kritik projelerde C/C++ vazgeçilmez bir dil kritik işleri bırakıp gömülü sistemlere döndüğünüz zaman yine C/C++ ı görebiliyorsunuz. Bazılarında şu anlayış mevcut C/C++ ile görsel programlama yapılamaz falan filan bunlar boş şeyler QT kullanarak platformdan bağımsız çok güzel GUI uygulamalar geliştirilebiliyor windows içinse WinApi Windows'un sağladığı 1-2 kaç şey daha var. Bunlarıda bir kenara bırakırsak oyun sektöründe de C/C++ sıkça kullanılıyor. Bunlar böyle dizilip gider ama Türkiye'de bu alanda pek bir şey beklememek lazım sebebi ise adam akıllı Ar-Ge işlerinin olmaması, insanların sürükle bırak ile yazılımcı oldum kafasından kaynaklanması, iş verenlerin maliyetten kaçması gibi sıralanır gider buda.
Sonuç olarak bir C/C++ geliştiricisi olarak işsizim :D
-
x-t0xid bunu yazdıbalbazar bunu yazdı
Tek tek teşekkür ederim herkese. Bir ikincisi de ilerleyen zamanlarda C++ 'nın kulllanım alanının azalacağını ve o yüzden fazla üstüne düşülmemesi gerektiğini duydum.
O yüzden C yi tam anlamıyla öğrendikten( yapabilirsem) Java ile devam etmeyi düşünüyorum. Sizin fikirleriniz nedir ?
Edit: SkynetX hocam bu arada yurtdışında düşünüyorum. Uzun süre Türkiye'ye uğramayı düşünmüyorum şöyle bir 8-9 sene kadarHocam ben C ile yazarım ve biraz dil ırkçılığı mevcut bende. Bir C yazılımcısı olarak ne yazık ki Türkiye'de iş bulmak sıkıntılı ve aşırı moral bozucu bu C/C++ ın kullanım alanının azalacağı anlamına gelmiyor. Günümüzde halende kritik alt yapılar ve kritik projelerde C/C++ vazgeçilmez bir dil kritik işleri bırakıp gömülü sistemlere döndüğünüz zaman yine C/C++ ı görebiliyorsunuz. Bazılarında şu anlayış mevcut C/C++ ile görsel programlama yapılamaz falan filan bunlar boş şeyler QT kullanarak platformdan bağımsız çok güzel GUI uygulamalar geliştirilebiliyor windows içinse WinApi Windows'un sağladığı 1-2 kaç şey daha var. Bunlarıda bir kenara bırakırsak oyun sektöründe de C/C++ sıkça kullanılıyor. Bunlar böyle dizilip gider ama Türkiye'de bu alanda pek bir şey beklememek lazım sebebi ise adam akıllı Ar-Ge işlerinin olmaması, insanların sürükle bırak ile yazılımcı oldum kafasından kaynaklanması, iş verenlerin maliyetten kaçması gibi sıralanır gider buda.
Sonuç olarak bir C/C++ geliştiricisi olarak işsizim :D
Anladım ki yazılımcı insanın hayatta kalabilmek için ilk olarak Türkiye'den uzaklaşması gerekiyor :D
-
C de sadece ve aanlaşılabilir kod ? :D
Hocam mümkün olduğu kadar değişken isimlerini sonradan bakınca bu ne amk demeyecek şekilde ver eyyorlamam bu kadar çünkü C bilmiyorum ama alt seviye bir dil herşeyi elle yapacan diğer dillerde ki gibi garbage collector vs yok 10 karakterlik integer için tutup 64 bit lik alan tutmayacan vs.
Bu arada sektöre yeni girdim öyle F5 e bas çalışıyorsa olmuyor kan alırlar götünden :D
Development ile çalıştırma ortamı çok farklı -
balbazar bunu yazdı
Tek tek teşekkür ederim herkese. Bir ikincisi de ilerleyen zamanlarda C++ 'nın kulllanım alanının azalacağını ve o yüzden fazla üstüne düşülmemesi gerektiğini duydum.
O yüzden C yi tam anlamıyla öğrendikten( yapabilirsem) Java ile devam etmeyi düşünüyorum. Sizin fikirleriniz nedir ?
Edit: SkynetX hocam bu arada yurtdışında düşünüyorum. Uzun süre Türkiye'ye uğramayı düşünmüyorum şöyle bir 8-9 sene kadarYurtdışına gidebiliyorsan git tabi. Durman hata.
C++ nın kullanımı azalıyor gibi bir şey yok. Bunu diyen dünyanın en büyük cahillerinden biridir. Sadece Türkiye de kullanılmıyor. Ki Türkiye de C# ve MS ürünleri dışında ne kullanılıyor ki? Dünya Python/Django - Ruby/Ror diye yıkılıyor biz de C# da C#. Üniversiteler bile MS ürünlerini öğretiyor.
C++; tüm AAA oyun stüdyolarında, savunma sanayi projelerinde atıyorum %90 oranında (diğer %10 da ASM ve ADA dilleri Java falan değil ha)
perfromans gerektiren tüm işlerde çatır çatır kullanılıyor. 11/14 versiyonları ile baya bir değişti/gelişti. 17/21 spesifkasyonları da var internetten bakabilirsin.
Eleştirilen birçok nokta düzeltiliyor.
Hatta C++ ile yapılan projelerin maddi boyutları diğer dillerdeki projelerden daha fazla bile olabilir. F-35, Curiosity falan kaç milyar dolarlık projeler.
(F-35 de en son 4 milyon C++ kodu vardı.)
Demek istediğm C++ ın öldüğü falan yok hatta kuantum bilgisayarlara kadar, Java ölür C# ölür, C++ ölmez. :)))))
@0x656;
Hocam C++ değil de C dili, en sade ve temiz kodların yazılabileceği dillerden biri. Diğeri tabi ki Payton. :)