freeCodeCamp/guide/arabic/miscellaneous/the-c-programming-language/index.md

201 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
title: The C Programming Language
localeTitle: لغة البرمجة C
---
## مبادئ
* اقامة
* برنامجك الأول C #
* أنواع ومتغيرات
* بيانات التحكم في التدفق
* العاملين
* سلاسل
* الفصول ، الكائنات ، الواجهة والطرق الرئيسية
* الحقول والخصائص
* نطاق ومعدلات إمكانية الوصول
* التعامل مع الاستثناءات
## متوسط
* الأدوية
* الأحداث ، المندوبين وتعديلات لامدا
* إطار مجموعة
* LINQ
## المتقدمة
* برمجة غير متزامنة (Async and Await)
* مكتبة المهام المتوازية
## ما هو الجديد في C # 6
* Null-Conditional Operator
* Auto-Initializers
* تعبير Nameof
* تعبير وظائف بودي وخصائص
* ميزات أخرى
## المبادئ الشيئية (OOP)
* التغليف
* التجريد
* ميراث
* تعدد الأشكال
## المبادئ الصلبة
* مبدأ المسؤولية الواحدة
* مفتوح المبدأ مغلق
* مبدأ استبدال Liskov
* مبدأ الفصل بين الواجهة
* مبدأ الانقلاب التبعية
## C # Best practices، Pattern Designs & Test Driven Development (TDD)
## اقامة
[LinqPad](http://www.linqpad.net/) عبارة عن [لوحة شاشة](http://www.linqpad.net/) NET لاختبار سريعا مقتطفات C # [code.The](http://www.linqpad.net/) الإصدار القياسي مجاني وأداة مثالية للمبتدئين لتنفيذ العبارات والتعبيرات والبرامج اللغوية.
بدلاً من ذلك ، يمكنك أيضًا تنزيل [Visual Studio Community 2015](https://www.visualstudio.com/en-us/products/visual-studio-community-vs.aspx) وهو [IDE قابل](https://en.wikipedia.org/wiki/Integrated_development_environment) للتوسعة يستخدمه معظم المتخصصين لإنشاء تطبيقات المؤسسة.
## برنامجك الأول C #
`//this is the single line comment
/** This is multiline comment,
compiler ignores any code inside comment blocks.
**/
//This is the namespace, part of the standard .NET Framework Class Library
using System;
// namespace defines the scope of related objects into packages
namespace Learning.CSharp
{
// name of the class, should be same as of .cs file
public class Program
{
//entry point method for console applications
public static void Main()
{
//print lines on console
Console.WriteLine("Hello, World!");
//Reads the next line of characters from the standard input stream.Most common use is to pause program execution before clearing the console.
Console.ReadLine();
}
}
}
`
يجب أن يكون لكل تطبيق من تطبيقات C # وحدة التحكم [طريقة رئيسية](https://msdn.microsoft.com/en-gb/library/acy3edy3.aspx) تمثل نقطة دخول البرنامج.
تحرير [HelloWorld](https://dotnetfiddle.net/kY7QRm) في .NET Fiddle ، أداة مستوحاة من [JSFiddle](http://jsfiddle.net) حيث يمكنك تغيير مقتطفات الشفرة والتحقق من الإخراج لنفسك. لاحظ أن هذا مجرد مشاركة واختبار مقتطفات الشفرة ، وليس لاستخدامها في تطوير التطبيقات.
إذا كنت تستخدم visual studio ، اتبع هذا [البرنامج التعليمي](https://msdn.microsoft.com/en-us/library/k1sx6ed2.aspx) لإنشاء تطبيق وحدة التحكم وفهم أول برنامج C #.
## أنواع ومتغيرات
C # هي لغة مكتوبة بقوة. كل متغير لديه نوع. كل تعبير أو بيان يتم تقييمه إلى قيمة. هناك نوعان من الأنواع في C #
* أنواع القيم
* أنواع المرجع.
**أنواع القيم** : المتغيرات التي تحتوي على أنواع قيم تحتوي على قيم مباشرة. إن تعيين متغير نوع قيمة واحد إلى آخر ينسخ القيمة المحتواة.
[تحرير في .NET Fiddle](https://dotnetfiddle.net/JCkTxb)
`int a = 10;
int b = 20;
a=b;
Console.WriteLine(a); //prints 20
Console.WriteLine(b); //prints 20
`
لاحظ أنه في اللغات الديناميكية الأخرى قد يكون هذا مختلفًا ، ولكن في C # يكون هذا دائمًا نسخة قيمة. عند إنشاء نوع القيمة ، يتم إنشاء مساحة واحدة على الأرجح في [بنية تخزين العناصر](http://gribblelab.org/CBootcamp/7_Memory_Stack_vs_Heap.html#orgheadline2) ، وهي بنية بيانات "LIFO" (آخر في أول خطوة). المكدس لديه حدود الحجم وعمليات الذاكرة فعالة. أمثلة قليلة من أنواع البيانات المضمنة هي `int, float, double, decimal, char and string` .
النوع | مثال | وصف
\--------- | -------------------------------------------------- --------------------------- | -------------------------------------------------- -------------------------------------------------- -----------------------------
_عدد صحيح_ `int fooInt = 7;` | **وقعت 32 بت** عدد صحيح
_طويل_ | `long fooLong = 3000L;` | **وقعت** عدد صحيح **64 بت** . **يتم استخدام L لتحديد أن قيمة المتغير هذه من النوع long / ulong**
_مزدوج_ | `double fooDouble = 20.99;` | الدقة: **15-16 رقمًا**
_تعويم_ | `float fooFloat = 314.5f;` | الدقة: **7 أرقام** . **يتم استخدام F لتحديد أن قيمة المتغير هذه من نوع float**
_عشري_ | `decimal fooDecimal = 23.3m;` | الدقة: من **28 إلى 29 رقمًا** . المزيد من الدقة والنطاق الأصغر يجعلها مناسبة **للحسابات المالية والنقدية**
_تشار_ | `char fooChar = 'Z';` | **حرف Unicode 16 بت** واحد
_منطقية_ | `bool fooBoolean = false;` | منطقية - **صحيحة و خاطئة**
_سلسلة_ `string fooString = "\"escape\" quotes and add \n (new lines) and \t (tabs);` | **سلسلة من أحرف Unicode.**
للحصول على قائمة كاملة بجميع أنواع البيانات المضمنة ، انظر [هنا](https://msdn.microsoft.com/en-us/library/ms228360)
[**أنواع المراجع**](https://msdn.microsoft.com/en-us/library/490f96s2.aspx) : تخزن متغيرات أنواع المراجع إشارات إلى الكائنات الخاصة بها ، مما يعني أنها تخزن العنوان إلى موقع البيانات الموجودة على [المكدس](http://gribblelab.org/CBootcamp/7_Memory_Stack_vs_Heap.html#orgheadline2) ، وتُعرف أيضًا بالمؤشرات. يتم تخزين البيانات الفعلية على ذاكرة [الكومة](http://gribblelab.org/CBootcamp/7_Memory_Stack_vs_Heap.html#orgheadline3) . لا يؤدي تعيين نوع المرجع إلى نوع آخر إلى نسخ البيانات ، وإنما ينشئ النسخة الثانية من المرجع الذي يشير إلى نفس الموقع على كومة الذاكرة المؤقتة.
في كومة الذاكرة المؤقتة ، يتم تخصيص الكائنات ثم deallocated بترتيب عشوائي ولهذا السبب يتطلب مقدار الحمل من إدارة الذاكرة [وجمع البيانات المهملة](https://msdn.microsoft.com/en-us/library/hh156531(v=vs.110) .aspx).
إذا لم تكن تكتب [تعليمات برمجية غير آمنة](https://msdn.microsoft.com/en-us/library/t2yzs44b.aspx) أو تتعامل مع [التعليمات البرمجية غير المُدارة](https://msdn.microsoft.com/en-us/library/sd10k43k(v=vs.100) .aspx) ، فلا داعي للقلق بشأن عمر مواقع الذاكرة الخاصة بك. سيعتني مترجمو .NET و CLR بهذا ، ولكن لا يزال من الجيد الاحتفاظ بهذا العقل لتحسين أداء تطبيقاتك.
مزيد من المعلومات [هنا](http://www.c-sharpcorner.com/UploadFile/rmcochran/csharp_memory01122006130034PM/csharp_memory.aspx?ArticleID=9adb0e3c-b3f6-40b5-98b5-413b6d348b91)
## بيانات التحكم في التدفق
* [if else](https://msdn.microsoft.com/en-us/library/5011f09h.aspx) statement: [Edit in .NET Fiddle](https://dotnetfiddle.net/IFVB33)
` int myScore = 700;
if (myScore == 700)
{
Console.WriteLine("I get printed on the console");
}
else if (myScore > 10)
{
Console.WriteLine("I don't");
}
else
{
Console.WriteLine("I also don't");
}`
` /** Ternary operators
A simple if/else can also be written as follows
<condition> ? <true> : <false> **/
int myNumber = 10;
string isTrue = myNumber == 10 ? "Yes" : "No";
`
* بيان [التبديل](https://msdn.microsoft.com/en-GB/library/06tc147t.aspx) : [تحرير في .NET Fiddle](https://dotnetfiddle.net/lPZftO)
باستخدام النظام
برنامج الطبقة العامة { الفراغ الثابت العام Main () { int myNumber = 0؛ التبديل (myNumber) { // يمكن أن يحتوي قسم التبديل على أكثر من علامة حالة واحدة. الحالة 0: حالة 1: { Console.WriteLine ("Case 0 or 1")؛ استراحة؛ }
` // Most switch sections contain a jump statement, such as a break, goto, or return.;
case 2:
Console.WriteLine("Case 2");
break;
// 7 - 4 in the following line evaluates to 3.
case 7 - 4:
Console.WriteLine("Case 3");
break;
// If the value of myNumber is not 0, 1, 2, or 3 the
//default case is executed.*
default:
Console.WriteLine("Default case. This is also optional");
break; // could also throw new Exception() instead
}
}
`
}
* [For](https://msdn.microsoft.com/en-us/library/ch45axte.aspx) & [Foreach](https://msdn.microsoft.com/en-gb/library/ttw7t8t6.aspx) : [Edit in .NET Fiddle](https://dotnetfiddle.net/edxtvq)
لـ (int i = 0؛ i <10؛ i ++) { Console.WriteLine (ط)؛ // print 0-9 }
Console.WriteLine (Environment.NewLine لـ (int i = i <= 10؛ i ++) { Console.WriteLine (ط)؛ // print 0-10 }
Console.WriteLine (Environment.NewLine لـ (int i = 10 - 1؛ i> = 0؛ i--) // decrement loop { Console.WriteLine (ط)؛ // يطبع 9-0 }
Console.WriteLine (Environment.NewLine)؛ //إلى عن على (؛ ؛ ) { // جميع التعبيرات اختيارية. هذا البيان // ينشئ حلقة لا نهائية. \* //
}
* [أثناء](https://msdn.microsoft.com/en-us/library/2aeyhxcd.aspx) [القيام](https://msdn.microsoft.com/en-us/library/370s1zax.aspx) [بالمهام](https://dotnetfiddle.net/O5hOF1) [أثناء](https://msdn.microsoft.com/en-us/library/370s1zax.aspx) : [تحرير في .NET Fiddle](https://dotnetfiddle.net/O5hOF1)
// استمر في فترة التكرار حتى يساوي الفهرس 10. int i = 0؛ بينما (أنا <10) { Console.Write ("While statement")؛ Console.WriteLine (i // اكتب الفهرس على الشاشة. i ++؛ // زيادة المتغير. }
عدد int = // نفذ العمل أولاً ، حتى يتم استيفاء الشرط ، أي ينتهي عند وجود رقم يساوي 4. فعل { Console.WriteLine (العدد) ؛ // يطبع القيمة من 0-4 عدد ++؛ // أضف واحدة للرقم. } بينما (العدد <= 4) ؛