2012-12-14 13 views
5

Bir hafta boyunca video oynatıyorum ve C'den özlediğim bir şey önişlemci makroları.C stilindeki makrolar Git

Borular clang -E aracılığıyla dosyalara dönüştürdüğü bir derleme komut dosyasını kullanmanın yanı sıra bu özelliği elde etmek için ne kullanabilirim?

+2

Bence Go'nun bazı felsefelerini özlüyorsunuz. Örneğin, açıklığın önemi. –

+1

Tabii ki açıklık önemlidir, fakat çoklu zamanlamayı tekrar etmeyi düşünmüyorum, aynı kod netlik açısından daha iyidir. –

+5

Neyi başarmaya çalıştığınıza dair bir örnek verirseniz, muhtemelen daha fazla "git" yolu vardır. – Chris

cevap

7

Açıklamalarda belirtildiği gibi, yapı bayrakları muhtemelen gereksinim duyduğunuz her şeyi çözmenin en iyi yoludur. Eğer gelişme yalnızca bazı özelliklere sahip istiyorsa Örneğin, bir dev bayrağı kullanın:

Dosya constants_dev.go:

// +build dev 
const DEVELOPMENT = true 

Dosya constants_pro.go içinde Sonra

// +build !dev 
const DEVELOPMENT = false 

senin Kod, sadece basit bir if DEVELOPMENT { blah... } yapın. Bunu herhangi bir ön işlemciden çok daha okunaklı buluyorum. Çok fazla sayıda inşaat bayrağı varsa bu oldukça karışık olabilir, ancak bu noktada muhtemelen komut satırı argümanlarını kullanmalısınız.

Yorumunuzda kodun çoğaltılmasından bahsetmiştiniz. Kodunuz gerçekten tekrar eden bir şeyse, muhtemelen bir işlevi bir fonksiyona sokmanız veya tekrarlayan bitleri yeniden kullanmak için yeniden yapılandırma kodu eklemeniz gerekir. Şahsen, basit boolean kontrollerinin ötesinde, özellikle C-stili makrolarla kodun devam ettirilmesinin zor olduğunu görüyorum.

Bu, jeneriklerle aynı şeydir. Kullandığım bir Java kütüphanesinde, sınıf imza böyle bir şey oldu: kütüphane çok iyi belgelenmiş değildi

class Thing<A, B, C, D, E> 

, bu yüzden kod önemli miktarda (gerek uygulama gerekse kodu okumak zorunda neler olduğunu anlamak için kütüphaneyi kullanır.

Go'da, dil genellikle daha iyi, kendini belgeleyen bir kod oluşturan bir stili zorlar. Go geliştiricilerinin, bir önişlemci ve jenerik gibi bir şeyleri, saklamak için zor yazmayı, ama akıllı kodları önlemek için attığını düşünüyorum.

Daha önce kullandığınız eski deyimlere bakmadan önce Git yolunu denemenizi tavsiye ederim. Makroların ve #defines'in çoğunun kullanılmasının büyük ölçüde ilgisiz olduğunu göreceksiniz.

5

Bence cpp, m4 ya da Go'yu önceden işlemiş olma isteğinizi yerine getirebilir. İyi bir fikirse veya bir karar değilse, herhangi bir ön işlemin yayınlanan herhangi bir Go kodunun benimsenmesi için önemli bir engel olduğu konusunda uyarınız. (Ve örneğin, maketlere bağımlı olmanın yapısı aynı hikayedir.)

İlgili konular