2011-09-09 13 views
7

क्या कोई ऐसी भाषा है जिसमें कोड टेम्पलेटिंग का एक रूप है? मुझे समझाने दो कि मेरा क्या मतलब है ... मैं आज सी # प्रोजेक्ट पर काम कर रहा था जिसमें मेरी कक्षाओं में से एक बहुत बार दोहराया गया था, संपत्ति गेटर्स और सेटर्स की एक श्रृंखला थी।क्या वहां कोई भाषा है जो कोड टेम्पलेटिंग का उपयोग करती है?

public static int CustomerID 
    { 
     get 
     { 
      return SessionHelper.Get<int>("CustomerID", 0); // 0 is the default value 
     } 
     set 
     { 
      SessionHelper.Set("CustomerID", value); 
     } 
    } 

    public static int BasketID 
    { 
     get 
     { 
      return SessionHelper.Get<int>("BasketID", 0); // 0 is the default value 
     } 
     set 
     { 
      SessionHelper.Set("BasketID", value); 
     } 
    } 

... and so forth ... 

मुझे एहसास है कि यह मूल रूप से एक प्रकार, एक नाम और एक डिफ़ॉल्ट मान में टूट सकता है।

मैंने यह आलेख देखा, जो कि मैंने कल्पना की है, लेकिन पैरामीटर (डिफ़ॉल्ट) के लिए कोई जगह नहीं है।

Generic Property in C#

लेकिन मैं सोच रहा था, वहाँ कई बार जहां कोड टेम्पलेट्स में टूट जाती है कर रहे हैं।

उदाहरण के लिए, वाक्य रचना के रूप में इस तरह के लिए जा सकते हैं:

public template SessionAccessor(obj defaultValue) : static this.type this.name 
{ 
    get 
    { 
      return SessionHelper.Get<this.type>(this.name.ToString(), defaultValue); 
    } 
    set 
    { 
      SessionHelper.Set(this.name.ToString(), value); 
    } 
} 

public int CustomerID(0), BasketID(0) with template SessionAccessor; 
public ShoppingCart Cart(new ShoppingCart()) with template SessionAccessor; // Class example 

मैं इस तरह लग रहा है संक्षिप्त, सूखी कोड लिखने में संभावनाओं का एक बहुत होगा। इस प्रकार की चीज प्रतिबिंब के साथ सी # में कुछ हद तक प्राप्त करने योग्य होगी, हालांकि यह धीमी है और यह संकलन के दौरान किया जाना चाहिए।

तो, प्रश्न: क्या इस प्रकार की कार्यक्षमता किसी भी मौजूदा प्रोग्रामिंग भाषा में संभव है?

+8

टी 4 के लिए नौकरी की तरह ध्वनि ... –

+2

सी ++ में टेम्पलेट्स हैं जो आप चाहते हैं कि करीब आते हैं: http://www.cplusplus.com/doc/tutorial/templates/ –

+0

यदि आपकी प्राथमिक चिंता है बॉयलरप्लेट में प्रवेश करने की कठोरता (और आपके बॉयलरप्लेट में बदलाव की संभावना नहीं), रिशेर्पर की एक अच्छी लाइव टेम्पलेट सुविधा है जो वास्तव में इसके साथ मदद करती है। टी 4 अधिक शक्तिशाली है (आप टेम्पलेट परिभाषा को अद्यतन कर सकते हैं और अद्यतन टेम्पलेट के साथ फ़ाइल को पुन: उत्पन्न कर सकते हैं), लेकिन यह कुछ अतिरिक्त जटिलता भी जोड़ता है। वेनिला वीएस में कोड स्निपेट हैं, जो भी मदद कर सकते हैं। –

उत्तर

9

जैसा कि मार्क ग्रेवेल ने टिप्पणी की, यह T4 (Text Template Transformation Toolkit) के लिए एक आसान काम है, जो विजुअल स्टूडियो के अंदर एकीकृत एक टेम्पलेटिंग प्रोसेसर है, जिसका उपयोग सी # या वीबी के साथ किया जा सकता है और कुछ भी उत्पन्न कर सकता है। यह एक उपकरण है, हालांकि अंतर्निहित भाषा सुविधा नहीं है।

अपने प्रोजेक्ट में कोई पाठ टेम्पलेट फ़ाइल (.tt) जोड़ें, के रूप में टेम्पलेट के रूप में सरल हो जाएगा:

<#@ template debug="false" hostspecific="false" language="C#" #> 
<#@ output extension=".generated.cs" #> 
<# 
var properties = new[] { 
    new Property { Type = typeof(int), Name = "CustomerID", DefaultValue = 0 }, 
    new Property { Type = typeof(int), Name = "BasketID", DefaultValue = 0 }, 
}; 
#> 
namespace YourNameSpace { 
    public partial class YourClass { 
<# foreach (Property property in properties) { #> 
     public static <#= property.Type.FullName #> <#= property.Name #> { 
      get { return SessionHelper.Get<<#= property.Type.FullName #>>("<#= property.Name #>", <#= property.DefaultValue #>); } 
      set { SessionHelper.Set("<#= property.Name #>", value); } 
     } 
<# } #> 
    } 
} 
<#+ 
public class Property { 
    public Type Type { get; set; } 
    public string Name { get; set; } 
    public object DefaultValue { get; set; } 
} 
#> 

टी -4 कोड पीढ़ी के इस प्रकार के लिए महान हैं। मैं प्रति टेम्पलेट एकाधिक फाइलें आसानी से उत्पन्न करने के लिए T4 Toolbox की अत्यधिक अनुशंसा करता हूं, विजुअल स्टूडियो और अन्य भलाई के अंदर सीधे अपने मौजूदा सी # कोड को पार्स करने के लिए एनवीडीटीई तक पहुंचें।

+1

पर एक नज़र डालें, एक अच्छे स्टार्टर ब्लॉग के लिए: http: //www.olegsych।कॉम/2007/12/टेक्स्ट-टेम्पलेट-ट्रांसफॉर्मेशन-टूलकिट/ – FuleSnabel

+0

बस एफवाईआई; टी 4 सी #, सी ++, सी, ऑब्जेक्टिव सी, एक्सएमएल, मूल रूप से कुछ भी पाठ उत्पन्न कर सकता है। यह मुझे महीनों के भयंकर भयानक दोहराव काम बचाया। – FuleSnabel

9

... और आपने metaprogramming की अद्भुत दुनिया की खोज की है। स्वागत हे! :-)

आर्किटेपल मेटाप्रोग्रामिंग भाषा Lisp है, या वास्तव में कोई अन्य भाषा जो कोड में अपनी संरचना का प्रतिनिधित्व कर सकती है।

अन्य भाषाओं ने इसे कुछ हद तक कॉपी करने की कोशिश की है; macros in C एक प्रमुख उदाहरण हैं।

कुछ हद तक इसका समर्थन करने वाली भाषाओं के हाल के प्रमुख उम्मीदवार C++ via its templates, और Ruby हैं।

संबंधित मुद्दे