परिचय
एक डेवलपर के रूप में, मैं प्रतिदिन बहुत सारे गणितीय कोड लिखने में शामिल हूं और मैं कोड लेखन और समीक्षा को कम करने के लिए सी # भाषा में बहुत कम वाक्य रचनात्मक चीनी जोड़ना चाहता हूं।विस्तार सी # भाषा, कितना प्रयास/लाभ?
मैं पहले से ही thread और इस अन्य one के बारे में संभावित समाधानों के लिए पढ़ चुका हूं और यह जानना चाहूंगा कि कौन सी सबसे अच्छी दिशा है और यह केवल निम्नलिखित तीन सिंटैक्टिकल मुद्दों * के लिए हल करने के लिए कितना प्रयास कर सकता है।
*: मैं वर्णित वाक्य रचनात्मक शर्करा के बिना जीवित रह सकता हूं, लेकिन यदि यह बहुत अधिक काम नहीं है और रूब-गोल्डबर्ग सरल संकलन प्रक्रिया के लिए डिज़ाइन, तो आगे की जांच करना दिलचस्प हो सकता है।
1. एकाधिक उत्पादन तर्क
मैं चाहता लिखने के लिए:
[double x, int i] = foo(z);
बजाय:
double x;
int i;
foo(out x, out i, z);
एनबी: out
मापदंडों पहले रखा जा रहा है और हमेशा की तरह foo
घोषित किया गया (या उसी तरह के वाक्यविन्यास का उपयोग कर)।
2. अतिरिक्त ऑपरेटर
मैं चाहूँगा कुछ नए एकल/बाइनरी ऑपरेटरों के लिए। ज्यादा पता नहीं है इन के लिए परिभाषित करने के लिए कैसे (और यह जब स्रोतों को पार्स अस्पष्टता को शुरू नहीं करने के लिए काफी जटिल लगता है), वैसे भी करना चाहते हैं कुछ की तरह:
namespace Foo
{
using binary operator "\" as "MyMath.LeftDivide";
using unary operator "'" as "MyMath.ConjugateTranspose";
public class Test
{
public void Example()
{
var y = x';
var z = x \ y;
}
}
}
के बजाय
:
namespace Foo
{
public class Test
{
public void Example()
{
var y = MyMath.ConjugateTranspose(x);
var z = MyMath.LeftDivide(x, y);
}
}
}
स्थिर कक्षाओं
यह अत्यंत अंतहीन) एक गणना कोड में बजाय सीधे लिखने की मठ .BlaBlaBla (दोहरा करने के लिए हर जगह अनाकर्षक है के लिए 3. स्वचालित नाम प्रविष्टि और बस नीला एब्लला।
निश्चित रूप से मैथ रैप करने के लिए स्थानीय विधियों को जोड़कर हल किया जा सकता है। बलाबालाबाला गणना कक्षा के अंदर। वैसे भी बेहतर होगा जब कोई अस्पष्टता नहीं है, या जब आवश्यक हो तो कक्षा नामों को स्वचालित रूप से सम्मिलित करने के लिए implicit
कीवर्ड के साथ अस्पष्टता हल की जाएगी।
उदाहरण के लिए:
using System;
using implicit MySystem; // Definying for 'MyMaths.Math.Bessel'
public class Example
{
public Foo()
{
var y = 3.0 * Cos(12.0);
var z = 3.0 * Bessel(42);
}
// Local definition of 'Bessel' function again
public static double Bessel(double x)
{
...
}
}
बन गयी:
using System;
using MySystem; // Definying for 'Math.Bessel'
public class Example
{
public Foo()
{
var y = 3.0 * System.Math.Cos(12.0); // No ambiguity at all
var z = 3.0 * MySystem.Math.Bessel(42); // Solved from `implicit` keyword
}
// Local definition of 'Bessel' function again
public static double Bessel(double x)
{
...
}
}
* संकलक बस एक चेतावनी संकेत मिलता है कि यह अस्पष्टता हल क्योंकि एक implicit
समाधान परिभाषित किया गया है उत्पन्न हो सकता है।
एनबी: 3) 2 को हल करने के लिए पर्याप्त संतुष्ट है)।
मिगुएल डी इकाज़ा सी # में भी tuple चाहता था http://tirania.org/blog/archive/2009/Dec-23.html –
Effot == बहुत और बहुत कुछ। लाभ == लगभग शून्य। जब तक आप जो भी प्रोग्रामिंग प्रोजेक्ट नहीं करते हैं, उसमें आप एकमात्र प्रोग्रामर बनना नहीं चाहते हैं, यह एक भयानक विचार है। (आप टूलींग सपोर्ट (यानी रिशेर्पर) को खत्म कर देंगे, आप किसी भी योग्य सी # प्रोग्रामर को अचानक अपनी पसंदीदा भाषा का उपयोग करने के लिए अयोग्य घोषित कर देंगे, कोई भी अंदर आने और आपके कोड को पढ़ने में सक्षम नहीं होगा, कोई रिफैक्टरिंग नहीं है, सूची अंतहीन है।) –
"स्थैतिक वर्गों के लिए स्वचालित नाम सम्मिलन" - क्लास क्वालीफायर के बिना स्थिर फ़ंक्शन का उपयोग करके, जावा में समर्थित; मैं यह नहीं कह रहा हूं कि यह वास्तव में एक अच्छी/बुरी बात है हालांकि: http://www.deitel.com/articles/java_tutorials/20060211/index.html –