folder Tahribat.com Forumları
linefolder C - C++
linefolder 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)

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    balbazar
    balbazar's avatar
    Kayıt Tarihi: 12/Mart/2010
    Erkek

    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];  
    }  
      

     

     

    balbazar tarafından 12/Oca/17 16:22 tarihinde düzenlenmiştir
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    x-t0xid
    x-t0xid's avatar
    Kayıt Tarihi: 12/Ağustos/2015
    Erkek

    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.

  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    MhmdAlmz
    MhmdAlmz's avatar
    Kayıt Tarihi: 09/Ağustos/2015
    Erkek

    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

     

     


    Andolsun kuşluk vaktine ve dindiği zaman o geceye ki, Rabbin sana veda etmedi ve darılmadı! Ve kesinlikle senin için sonu önünden (ahiret dünyadan) daha hayırlıdır. ileride Rabbin sana verecek de hoşnut olacaksın! O, seni bir yetim iken barındırmadı mı? Seni, yol bilmez iken (doğru) yola koymadı mı? Seni bir yoksul iken zengin etmedi mi? Öyle ise, sakın yetime kahretme (onu horlama)! El açıp isteyeni de azarlama! Fakat Rabbinin nimetini anlat da anlat!
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    SkynetX
    SkynetX's avatar
    Kayıt Tarihi: 06/Şubat/2015
    Erkek

    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

     

  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Amatör Üye
    masteryoda
    masteryoda's avatar
    Kayıt Tarihi: 15/Mayıs/2012
    Erkek

    https://www.youtube.com/watch?v=OqIOQNfPebk

     

     

    masteryoda tarafından 12/Oca/17 17:24 tarihinde düzenlenmiştir
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    nickalti
    Lightsaber
    Lightsaber's avatar
    Kayıt Tarihi: 29/Ağustos/2012
    Erkek
    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.


    İnsan; insan olsaydı,insan olmazdı..
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    balbazar
    balbazar's avatar
    Kayıt Tarihi: 12/Mart/2010
    Erkek

    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 kadar

    balbazar tarafından 12/Oca/17 17:41 tarihinde düzenlenmiştir
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    x-t0xid
    x-t0xid's avatar
    Kayıt Tarihi: 12/Ağustos/2015
    Erkek
    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 kadar

    Hocam 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 

  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    balbazar
    balbazar's avatar
    Kayıt Tarihi: 12/Mart/2010
    Erkek
    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 kadar

    Hocam 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

  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    nick6
    0x656e
    0x656e's avatar
    Kayıt Tarihi: 19/Mayıs/2012
    Homo

    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ı 

  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    SkynetX
    SkynetX's avatar
    Kayıt Tarihi: 06/Şubat/2015
    Erkek
    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 kadar

    Yurtdışı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. :)

Toplam Hit: 3586 Toplam Mesaj: 2
c language