mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2024-11-24 15:03:19 +03:00
257 lines
12 KiB
D
257 lines
12 KiB
D
---
|
||
language: D
|
||
filename: learnd-hd.d
|
||
contributors:
|
||
- ["Nick Papanastasiou", "www.nickpapanastasiou.github.io"]
|
||
lang: hd
|
||
---
|
||
|
||
```c
|
||
//क्या आ रहा है पता है ...
|
||
module hello;
|
||
|
||
import std.stdio;
|
||
|
||
void main(string[] args) {
|
||
writeln("Hello, World!");
|
||
}
|
||
```
|
||
|
||
अगर आप मेरे जैसे हैं और इंटरनेट पर समय बहुत अधिक समय खर्च करते हैं, तो आप बाधाओं के बारे में सुना है
|
||
के बारे में [डी ] ( http://dlang.org/ )। डी प्रोग्रामिंग भाषा में एक आधुनिक, सामान्य प्रयोजन है ,
|
||
सब कुछ के लिए समर्थन कम स्तर की सुविधाओं से करने के साथ बहु - प्रतिमान भाषा
|
||
अर्थपूर्ण उच्च स्तरीय चीजें ।
|
||
|
||
D सक्रिय रूप से सुपर स्मार्ट लोगों का एक बड़ा समूह द्वारा विकसित की है और नेतृत्व द्वारा किया जाता है
|
||
[ वाल्टर ब्राइट ] ( https://en.wikipedia.org/wiki/Walter_Bright ) और
|
||
[ आंद्रेई Alexandrescu ] ( https://en.wikipedia.org/wiki/Andrei_Alexandrescu )।
|
||
जिस तरह की है कि सभी के साथ बाहर, चलो कुछ उदाहरणों पर गौर करते हैं!
|
||
|
||
|
||
```c
|
||
import std.stdio;
|
||
|
||
void main() {
|
||
|
||
for(int i = 0; i < 10000; i++) {
|
||
writeln(i);
|
||
}
|
||
|
||
// 'auto' can be used for inferring types.
|
||
auto n = 1;
|
||
|
||
// संख्यात्मक literals स्पष्टता के लिए एक अंकों विभाजक के रूप में '_' का उपयोग कर सकते हैं।
|
||
while(n < 10_000) {
|
||
n += n;
|
||
}
|
||
|
||
do {
|
||
n -= (n / 2);
|
||
} while(n > 0);
|
||
// लिए और जब तक अच्छा कर रहे हैं, लेकिन D में हम 'foreach' छोरों पसंद करते हैं।
|
||
// '..' पहला मान सहित एक सतत श्रृंखला बनाता है,
|
||
// लेकिन पिछले छोड़कर।
|
||
foreach(i; 1..1_000_000) {
|
||
if(n % 2 == 0)
|
||
writeln(i);
|
||
}
|
||
|
||
// वहाँ भी 'foreach_reverse' आप पीछे की ओर पाश करना चाहते हैं।
|
||
foreach_reverse(i; 1..int.max) {
|
||
if(n % 2 == 1) {
|
||
writeln(i);
|
||
} else {
|
||
writeln("No!");
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
हम ' struct`, `class`,` union`, और `` enum` साथ नए प्रकार परिभाषित कर सकते हैं। Structs और unions
|
||
मूल्य से कार्य करने के लिए पारित कर रहे हैं (यानी नकल) और वर्गों के संदर्भ द्वारा पारित कर रहे हैं। इसके अलावा,
|
||
हम प्रकारों और मानों दोनों पर करने के लिए टेम्पलेट का उपयोग कर सकते हैं!
|
||
|
||
```c
|
||
// इधर, 'T' एक प्रकार पैरामीटर है। लगता है कि '<+T>' C++ / C/ Java से।
|
||
struct LinkedList(T) {
|
||
T data = null;
|
||
|
||
// '!'का प्रयोग करें , एक पैरामिट्रीकृत प्रकार इन्स्तांत । फिर, '<T >' लगता है।
|
||
LinkedList!(T)* next;
|
||
}
|
||
|
||
class BinTree(T) {
|
||
T data = null;
|
||
|
||
// केवल एक टेम्पलेट पैरामीटर नहीं है, तो , हम कोष्ठकों छोड़ सकते हैं।
|
||
BinTree!T left;
|
||
BinTree!T right;
|
||
}
|
||
|
||
enum Day {
|
||
Sunday,
|
||
Monday,
|
||
Tuesday,
|
||
Wednesday,
|
||
Thursday,
|
||
Friday,
|
||
Saturday,
|
||
}
|
||
|
||
// उपयोग उर्फ प्रकार (alias) के लिए संक्षिप्त बनाने के लिए।
|
||
alias IntList = LinkedList!int;
|
||
alias NumTree = BinTree!double;
|
||
|
||
//हम के रूप में अच्छी तरह से कार्य टेम्पलेट्स बना सकते हैं!
|
||
T max(T)(T a, T b) {
|
||
if(a < b)
|
||
return b;
|
||
|
||
return a;
|
||
}
|
||
|
||
// संदर्भ द्वारा पारित सुनिश्चित करने के लिए रेफरी कीवर्ड का प्रयोग करें । यही कारण है कि यहां तक कि 'A' और 'B' , तो है
|
||
//मान प्रकार वे हमेशा ' swap()' के संदर्भ द्वारा पारित हो जाएगा हैं ।
|
||
void swap(T)(ref T a, ref T b) {
|
||
auto temp = a;
|
||
|
||
a = b;
|
||
b = temp;
|
||
}
|
||
|
||
// टेम्पलेट्स के साथ, हम भी मूल्यों पर परमेटेराइज़ कर सकते हैं , न सिर्फ types.With टेम्पलेट्स, हम भी नहीं है, बस प्रकार , मूल्यों पर parameterize कर सकते हैं।
|
||
class Matrix(uint m, uint n, T = int) {
|
||
T[m] rows;
|
||
T[n] columns;
|
||
}
|
||
|
||
auto mat = new Matrix!(3, 3);
|
||
|
||
```
|
||
|
||
Classes की बात हो रही है , एक दूसरे के लिए गुणों के बारे में बात करते हैं। एक संपत्ति
|
||
एक value की तरह कार्य कर सकते हैं कि एक समारोह में मोटे तौर पर है, इसलिए हम कर सकते हैं
|
||
के शब्दों के साथ पॉड संरचनाओं की वाक्य रचना (` structure.x = 7` ) है
|
||
मनुष्य और सेटर तरीकों ( ` object.setX (7) `) !
|
||
|
||
```c
|
||
// Consider a class parameterized on types 'T' & 'U'.
|
||
class MyClass(T, U) {
|
||
T _data;
|
||
U _other;
|
||
}
|
||
|
||
// And "getter" and "setter" methods like so:
|
||
class MyClass(T, U) {
|
||
T _data;
|
||
U _other;
|
||
|
||
// भवन निर्माताओं हमेशा नामित कर रहे हैं 'this'.
|
||
this(T t, U u) {
|
||
//यह नीचे सेटर तरीकों से मुलाकात करेंगे।
|
||
data = t;
|
||
other = u;
|
||
}
|
||
|
||
// getters
|
||
@property T data() {
|
||
return _data;
|
||
}
|
||
|
||
@property U other() {
|
||
return _other;
|
||
}
|
||
|
||
// setters
|
||
@property void data(T t) {
|
||
_data = t;
|
||
}
|
||
|
||
@property void other(U u) {
|
||
_other = u;
|
||
}
|
||
}
|
||
|
||
//और हम इस तरह से उन का उपयोग करें :
|
||
void main() {
|
||
auto mc = new MyClass!(int, string)(7, "seven");
|
||
|
||
करने के लिए लिखने के लिए मानक पुस्तकालय से
|
||
// आयात ' stdio ' मॉड्यूल
|
||
// सांत्वना (आयात एक गुंजाइश के लिए स्थानीय हो सकता है) ।
|
||
import std.stdio;
|
||
|
||
// Call the getters to fetch the values.
|
||
writefln("Earlier: data = %d, str = %s", mc.data, mc.other);
|
||
|
||
// Call the setters to assign new values.
|
||
mc.data = 8;
|
||
mc.other = "eight";
|
||
|
||
// Call the getters again to fetch the new values.
|
||
writefln("Later: data = %d, str = %s", mc.data, mc.other);
|
||
}
|
||
```
|
||
|
||
गुणों के साथ, हम तर्क की किसी भी राशि को जोड़ सकते हैं
|
||
हमारे मनुष्य और सेटर तरीकों, और की साफ वाक्य रचना रखना
|
||
सीधे सदस्यों तक पहुँचने !
|
||
|
||
हमारे निपटान पर अन्य वस्तु उन्मुख उपहार
|
||
` interface`s , ` सार class`es शामिल
|
||
और ` तरीकों override`ing । डी सिर्फ जावा की तरह विरासत करता है:
|
||
आप कृपया के रूप में कई इंटरफेस को लागू करने, एक वर्ग का विस्तार ।
|
||
|
||
हम डी एस OOP सुविधाओं देखा , लेकिन स्विच गियर छोड़ दिया । डी प्रस्तावों
|
||
प्रथम श्रेणी के कार्यों के साथ कार्यात्मक प्रोग्रामिंग, ` pure`
|
||
काम करता है, और अपरिवर्तनीय डेटा । इसके अलावा, अपने पसंदीदा के सभी
|
||
कार्यात्मक एल्गोरिदम ( नक्शा, फिल्टर , कम करने और मित्र हो सकते हैं)
|
||
अद्भुत ` std.algorithm` मॉड्यूल में पाया!
|
||
|
||
```c
|
||
import std.algorithm : map, filter, reduce;
|
||
import std.range : iota; // builds an end-exclusive range
|
||
|
||
void main() {
|
||
// हम भी ints के वर्गों की एक सूची का योग मुद्रित करना चाहते हैं
|
||
// 1 से 100 के लिए आसान करने के लिए!
|
||
|
||
// बस टेम्पलेट पैरामीटर के रूप में लैम्ब्डा भाव के पास!
|
||
// आप आप की तरह किसी भी पुराने समारोह पारित कर सकते हैं , लेकिन lambdas यहाँ सुविधाजनक हैं।
|
||
auto num = iota(1, 101).filter!(x => x % 2 == 0)
|
||
.map!(y => y ^^ 2)
|
||
.reduce!((a, b) => a + b);
|
||
|
||
writeln(num);
|
||
}
|
||
```
|
||
|
||
हम NUM गणना करने के लिए एक अच्छा Haskellian पाइपलाइन का निर्माण करने के लिए मिला सूचना कैसे ?
|
||
यही कारण है कि एक डी नवाचार करने के लिए धन्यवाद वर्दी समारोह कॉल सिंटेक्स के रूप में जानते हैं।
|
||
UFCS के साथ, हम एक विधि के रूप में एक समारोह कॉल लिखने के लिए चुन सकते हैं
|
||
या मुफ्त समारोह कॉल ! वाल्टर इस पर एक अच्छा लेख लिखा था
|
||
[यहाँ ।] ( http://www.drdobbs.com/cpp/uniform-function-call-syntax/232700394 )
|
||
संक्षेप में, आप जिनकी पहली पैरामीटर कार्यों कॉल कर सकते हैं
|
||
एक विधि के रूप में ग्रुप ए की किसी भी अभिव्यक्ति पर कुछ प्रकार एक की है ।
|
||
|
||
मैं समानता चाहते । समानता की तरह कोई और? ज़रूर तुम करना। चलो कुछ करते हैं!
|
||
```c
|
||
import std.stdio;
|
||
import std.parallelism : parallel;
|
||
import std.math : sqrt;
|
||
|
||
void main() {
|
||
// हम हमारे सरणी में वर्गमूल हर नंबर ले जाना चाहता हूँ ,
|
||
// हम उपलब्ध है के रूप में और के रूप में कई कोर का लाभ ले।
|
||
auto arr = new double[1_000_000];
|
||
|
||
// संदर्भ के द्वारा एक सूचकांक , और एक सरणी तत्व का प्रयोग
|
||
// और सिर्फ सरणी पर समानांतर फोन!
|
||
foreach(i, ref elem; parallel(arr)) {
|
||
ref = sqrt(i + 1.0);
|
||
}
|
||
}
|
||
|
||
|
||
```
|