الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

السي شارب مقابل الجافا - نقاش علمي هادف

رائج
بدأه سلفي وأفتخر في 23 مايو 2010 · 96 رد · 13,994 مشاهدة · في الأخبار والنقاشات التقنية
مشاركة: واتساب X فيسبوك تيليجرام
#76

شكرا أخ أحمد وجزاك الله خيرا ( أين تجد الوقت لكتابة هذا الكم من المعلومات blink.gifsmile.gif )

أحمد عبد المنعم كتب:

(أظن أن الـ enum في الجافا أيضاً لست متأكداً أرجو تصحيح المعلومة)

ال enum في الجافا ما هي إلا نوع من ال class، أي ما ينطبق على الفئات ينطبق على ال enum. فهي ليست "Value Type" مثل ما هو الحال في #C.

تم تعديل هذه المشاركة بواسطة herch في 24 يونيو 2010 في 21:26

#77
herch كتب:

شكرا أخ أحمد وجزاك الله خيرا ( أين تجد الوقت لكتابة هذا الكم من المعلومات blink.gifsmile.gif )

ال enum في الجافا ما هي إلا نوع من ال class، أي ما ينطبق على الفئات ينطبق على ال enum. فهي ليست "Value Type" مثل ما هو الحال في #C.

وإياك أخي herch :)

إذن كيف يتم تعريفه في الجافا ..

في السي شارب يتم تعريفه باستخدام enum keyword

هكذا ..

public enum Color
{
Red,
Blue,
Black
}

هل بالمثل في الجافا .. ؟

مدونة ابنتي الرضيعة: يوميات رزان

مدونتي التقنية العربية: البرمجة مع عبد المنعم

Technical Blog: Abdul Moniem's Thoughts

LinkedIn: Profile

#78

يتم استعمال الكلمة المفتاحية enum في الجافا أيضا

public enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY, 
    THURSDAY, FRIDAY, SATURDAY 
}

لكن ال enum في الخلفية عبارة عن class، وبالتالي يختلف عن نظيره في #C.

وبما أن ال enums هي عبارة عن classes، فيمكن أن نضيف لها methods, properties & contructors.

#79
herch كتب:

وبما أن ال enums هي عبارة عن classes، فيمكن أن نضيف لها methods, properties & contructors.

ممم مثير للاهتمام ..

وما الفائدة في هذا ..

نحن نعتبر أن ال enums هي مجموعة مقننة من الـ constants تساوي رقم مثلاً int وهذا هو الافتراضي ويمكنك جعله أي رقم أخر بالوراثة من النوع الذي تريده ..

فما هي إلا مجرد constants ..

ما الفائدة إذن لأن يكون هناك constructors أو members عموماً .. هل من مثال عملي يوضح الفائدة في ذلك؟

مدونة ابنتي الرضيعة: يوميات رزان

مدونتي التقنية العربية: البرمجة مع عبد المنعم

Technical Blog: Abdul Moniem's Thoughts

LinkedIn: Profile

#80

شكرا أخي أحمد, جزاك الله الخير كل الخير...

إتفقنا إذن أن الأنواع البدائية (Value types, primitives) يتم تخزينها على حسب المكان:

في حالة الدوال (سواء كانت parameters او local variables) فسيتم تخزينها في ال Stack

في حالة ال member variables للكائنات, يتم تخزينها داخل الكائن في ال Heap

أما الأنواع ال reference :

في جميع الحالات يتم تخزينها في ال Heap (كما فصلت أنت سابقا كما بالشكل التالي:)

post-53551-075608600%201277396427.jpg

إذن لو قسمناها تقسيم أخر على حسب المجال الذي يتم تعريف المتغير في:

1- المتغيرات المحليه و ال parameters للدوال:

لو بدائية - ال stack

لو reference - ال heap (مع وجود موشر في ال stack يشير عليها)

2- ال member variables

في ال heap سواء كانت بدائية أو reference (مع وجود مؤشر من ال stack طبعا)

لو بدائية, فإنها تعرف مكانها داخل مساحة الكائن في ال heap

لو reference فإنها تعرف في مكان أخر في الheap مع وجود مؤشر عليها داخل مساحة ال كائين في ال heap

بقي سؤالان:

1- هناك مجال من المجالات لم نتطرق إليه, فقد تطرقنا إلى المتغيرات التي يتم تعريفا داخل الداله و المتغيرات التي يتم تعريفها داخل الفئات (classes) ماذا عن ال global varaibles التي لا تتعرف بداخل داله أو داخل فئه (مثل الموجوده بلغة ال C) ؟؟

2- هناك نوع بيانات أخر لم نتطرق إليه, فنحن تحدثنا عن ال primitive و ال references , إذن ماذا عن ال Pointers ؟

تم تعديل هذه المشاركة بواسطة هويدي في 24 يونيو 2010 في 21:48

#81
اقتباس
فيمكن أن نضيف لها methods, properties & contructors.

هذا متاح من خلال الـ structs في السي شارب

مدونة ابنتي الرضيعة: يوميات رزان

مدونتي التقنية العربية: البرمجة مع عبد المنعم

Technical Blog: Abdul Moniem's Thoughts

LinkedIn: Profile

#82
هويدي كتب:

بقي سؤالان:

1- هناك مجال من المجالات لم نتطرق إليه, فقد تطرقنا إلى المتغيرات التي يتم تعريفا داخل الداله و المتغيرات التي يتم تعريفها داخل الفئات (classes) ماذا عن ال global varaibles التي لا تتعرف بداخل داله أو داخل فئه (مثل الموجوده بلغة ال C) ؟؟

ليس لدي علم بهذه النقطة .. ولكني بحثت عنها ووجدت أن هناك خلافاً بين الناس ولكن الكثير يقول أن هناك مكان خاص يحجز لها لا في الـ Stack ولا في الـ Heap مساحته ثابتة طوال عمل البرنامج .. ولست أدري بالضبط دقة المعلومة .. أرجو أن يفيدنا من هو أعلم مني في المسألة.

هويدي كتب:

2- هناك نوع بيانات أخر لم نتطرق إليه, فنحن تحدثنا عن ال primitive و ال references , إذن ماذا عن ال Pointers ؟

كما ذكرت أنا لست خبيراً في السي و السي ++ .. ولكن أنا أحاول التفكير معك بصوت عالي ..

إذا نظرنا إلى طريقة تعريف ال pointer ..

int *y;

فأنا أرى أنه في هذه الحالة سينطبق عليه قاعدة الـ value types ... أي سيتم تخزينه في المكان الذي سيتم فيه تخزين الكلاس الذي يحتويه .. ففي حالة أنه كان local سيتم تخزينه في الـ Stack ..

ولو نظرنا إلى طريقة تعامل السي شارب والجافا مع المؤشرات في الذاكرة فهي في الـ stack .. فأنا أظن أنه في الأعلم الأغلب يكون في الـ Stack وهذا يرجع إلى مكان تعريفه.

وننتظر رأي الخبراء أيضاً :)

مدونة ابنتي الرضيعة: يوميات رزان

مدونتي التقنية العربية: البرمجة مع عبد المنعم

Technical Blog: Abdul Moniem's Thoughts

LinkedIn: Profile

#83
أحمد عبد المنعم كتب:

ممم مثير للاهتمام ..

وما الفائدة في هذا ..

نحن نعتبر أن ال enums هي مجموعة مقننة من الـ constants تساوي رقم مثلاً int وهذا هو الافتراضي ويمكنك جعله أي رقم أخر بالوراثة من النوع الذي تريده ..

فما هي إلا مجرد constants ..

ما الفائدة إذن لأن يكون هناك constructors أو members عموماً .. هل من مثال عملي يوضح الفائدة في ذلك؟

أظن أن ال enums تم حشرها رغما عن أنفها في الجافا smile.gif

التعامل مع ال enums في الجافا هو نفسه كما باقي اللغات، لكن بما أنه لم يتم إنشاء صنف جديد خاص بال enums، بل فقط بعض الترقيعات لتوفير إمكانية تعريف enum ظاهريا، لكن ما يجري في الخلف هو إنشاء فئة وتهيئة ال constants وما إلى ذلك.

فلا أظن أن مسألة إضافة ال constructors وما إلى ذلك كانت ميزة يسعون إليها، لكن فقط نتيجة لكون ال enums ... مجرد فئات.

تم تعديل هذه المشاركة بواسطة herch في 24 يونيو 2010 في 22:02

#84

نعم .. فهمت ..

وهذا تفسير منطقي جداً ..

لأنني سألت نفسي عندما علمت أن هذه الإمكانية موجودة في الـ Enums في الجافا ... وقلت ..

إذن ما الفرق بينها وبين الـ Class؟

جزاك الله خيراً أخي herch على الإيضاح :)

بالمناسبة أنا مستمتع جداً بهذا النقاش العلمي :) منك ومن الجميع :)

بارك الله فيكم جميعاً :)

تم تعديل هذه المشاركة بواسطة أحمد عبد المنعم في 24 يونيو 2010 في 22:05

مدونة ابنتي الرضيعة: يوميات رزان

مدونتي التقنية العربية: البرمجة مع عبد المنعم

Technical Blog: Abdul Moniem's Thoughts

LinkedIn: Profile

#85

كما أوضح الأخ عصام, ال enum في الجافا يمكن إعتباره أنه class ذات كائنات معرفه مسبق (pre-defined instances)

#86
هويدي كتب:

كما أوضح الأخ عصام, ال enum في الجافا يمكن إعتباره أنه class ذات كائنات معرفه مسبق (pre-defined instances)

هل معنى هذا أنه يوجد مثلاً Class اسمه Enum ... وكل الـ Classes التي يعرفها المبرمج على أنها enum ترث من هذا الـ Class؟

هل يمكن أن أرى الـ Hierarchy الخاص بهذا الموضوع؟

مدونة ابنتي الرضيعة: يوميات رزان

مدونتي التقنية العربية: البرمجة مع عبد المنعم

Technical Blog: Abdul Moniem's Thoughts

LinkedIn: Profile

#87

نغم، كل ال enums التي يتم تعريفها ترث تلقائيا من الفئة Enum، التي بدورها ترث من Object مثل كل الفئات في الجافا.

#88

بإذن الله نكمل النقاش اليوم ..

أنا أسف جداً للتأخير ..

هل ما زال هناك متابعون؟!

مدونة ابنتي الرضيعة: يوميات رزان

مدونتي التقنية العربية: البرمجة مع عبد المنعم

Technical Blog: Abdul Moniem's Thoughts

LinkedIn: Profile

#89

بالتاكيد

اتكل على الله وابدا

ربنا يجزيك الخير

In bad state

#90

أي نعم

#91

نكمل بإذن الله الموضوع .. من عند هذه النقطة:

التحكم في سير البرنامج Conditional statements, loops, jump statements

من خلال السي شارب يمكنك التحكم في سير البرنامج عن طريق مجموعة من التعليمات تعطيك القوة والمرونة لذلك ... وسنستعرض هنا بعض هذه الأمور:

1) الجمل الشرطية Conditional Statements

هناك بعض الجمل الشرطية التي تساعد على التحكم في سير البرنامج من خلال تحديد قيمة شرط معين ومن ثم تحديد مسار البرنامج. وهذه الجمل تتمثل في:

  • if .. else ومشتقاتها
  • switch

نعطي مثالاً بسيطاً على كل من الجملتين السابقتين:

أولاً: الـ If Statement

int i = 10;
if(i >= 10)
{
// Do something
}
else
{
// Do another thing
}

السي شارب أيضاً تدعم طريقة مختصرة في التعامل مع if وذلك عن طريق الشكل التالي:

int i = 10;
return i >= 10? //Do something : // Do another thing;

ثانياً: الـ Switch Statement

// Switch on a numerical value.
static void ExecuteSwitch()
{
Console.WriteLine("1 [C#], 2 [VB]");
Console.Write("Please pick your language preference: ");
string langChoice = Console.ReadLine();
int n = int.Parse(langChoice);
switch (n)
{
case 1:
Console.WriteLine("Good choice, C# is a fine language.");
break;
case 2:
Console.WriteLine("VB: OOP, multithreading, and more!");
break;
default:
Console.WriteLine("Well...good luck with that!");
break;
}
}

2) الجمل التكرارية Loops

تدعم السي شارب عدة جمل خاصة بالتكرار ولكل منها فائدة معينة. وهم:

  • for loop
  • foreach loop
  • while loop
  • do..while loop

ونعطي مثالاً على كل منهم:

أولاً: for loop:

// A basic for loop.
static void ForAndForEachLoop()
{
// Note! "i" is only visible within the scope of the for loop.
for(int i = 0; i < 4; i++)
{
Console.WriteLine("Number is: {0} ", i);
}
// "i" is not visible here.
}

وتستخدم عادة عندما تريد التحكم في عدد المرات بالضبط التي يقوم فيها الكود بتنفيذ عملياته.

ثانياً: foreach

// Iterate array items using foreach.
static void ForAndForEachLoop()
{
...
string[] carTypes = {"Ford", "BMW", "Yugo", "Honda" };
foreach (string c in carTypes)
Console.WriteLine(c);
int[] myInts = { 10, 20, 30, 40 };
foreach (int i in myInts)
Console.WriteLine(i);
}

وتستخدم عندما تريد تنفيذ عملية ما على كل العناصر داخل مصفوفة أو Collection أو غير ذلك وهي الأشهر بين مبرمجي السي شارب.

ثالثاً: while loop

static void ExecuteWhileLoop()
{
string userIsDone = "";
// Test on a lower-class copy of the string.
while(userIsDone.ToLower() != "yes")
{
Console.Write("Are you done? [yes] [no]: ");
userIsDone = Console.ReadLine();
Console.WriteLine("In while loop");
}
}

تستخدم عندما تريد تنفيذ عملية ما أكثر من مرة حتى يتم التحقق من شرط معين فإن تحقق يتم إنهاء الجملة مباشرة.

رابعاً: do..while loop

static void ExecuteDoWhileLoop()
{
string userIsDone = "";
do
{
Console.WriteLine("In do/while loop");
Console.Write("Are you done? [yes] [no]: ");
userIsDone = Console.ReadLine();
}while(userIsDone.ToLower() != "yes"); // Note the semicolon!
}

وتستخدم عندما تريد أن تضمن تنفيذ العملية للمرة الأولى .. ثم بعد ذلك يتم التحقق من الشرط كالـ while loop تماماً.

3) الـ jump statements

وهذه الجمل تمكن المبرمج من الانتقال بين أجزاء البرنامج مباشرة دون شروط معينة أو قواعد تحكمه. والسي شارب تدعم التالي:

  • continue
  • break
  • goto

ربما لم نتفحص في داخل هذه الجمل بالتفصيل كما فعلنا في سابقتها ولكن طريقة عملها كطريقتها غالباً في الجافا والسي ++.

جزاكم الله خيراً .. وأنتظر رد أخواننا محبي الجافا :)

1

مدونة ابنتي الرضيعة: يوميات رزان

مدونتي التقنية العربية: البرمجة مع عبد المنعم

Technical Blog: Abdul Moniem's Thoughts

LinkedIn: Profile

#92

جميل جدا و رائع,,

#93

1) الجمل الشرطية Conditional Statements

توجد ثلاث أنواع من الجمل الشرطية:

  • if / else
  • ternary operator
  • switch

if / else

int i = 10;
if(i == 10) {
	// Do something
} else if (i > 10) {
	// Do another thing
} else {
	// You have no other choice ;)
}


ternary operator
هذه الجملة الشرطية تتبع القالب التالي
condition ? value to return if true : value to return if false

int money = 1000;
String message = money >= 10000 ? "Welcome" : "GO AWAY!!";


switch
يمكن تطبيق هذه الجملة الشرطية فقط على الأصناف البدائية primitive types التي تمثل قيمة عددية

int rank = 10;
switch (rank) {
	case 1:
		System.out.println("Gold medal... CONGRATULATIONS");
		break;
	case 2:
		System.out.println("Silver medal... CONGRATULATIONS");
		break;
	case 3:
		System.out.println("Bronze medal... CONGRATULATIONS");
		break;
	default:
		System.out.println("Train harder... LOSER");
		break;
}


2) الجمل التكرارية Loops

  • for loop
  • foreach loop
  • while loop
  • do..while loop

for loop

وتستعمل عندما نريد التحكم في عدد التكرار وفي ال step التي نتقدم به في كل مرة

for (int i = 0; i < 60; i+=2) {
	System.out.println("TIC TOC");
}

foreach

نستعملها عندما لا نكون بحاجة لمعرفة index

String[] daysOfWeek = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
for (String day : daysOfWeek) {
	System.out.println(day);
}

while

تستخدم عندما تريد تنفيذ عملية ما أكثر من مرة حتى يتم التحقق من شرط معين فإن تحقق يتم إنهاء الجملة مباشرة.

boolean alive = true;
while(alive) {
	System.out.println("Enjoy your life");
}

do ...while

وتستخدم عندما تريد أن تضمن تنفيذ العملية للمرة الأولى .. ثم بعد ذلك يتم التحقق من الشرط كالـ while loop تماماً.

do {
	// ...
} while (condition);

3) الـ jump statements

  • continue: تقوم بإنهاء ال loop الحالية والإستمرار في ال loop التالية
  • break : تخرج من ال block الحالي، والذي يكون إما loop أو switch، إلى ال block الذي يحتويه. يمكن أيضا إضافة label إلى break بحيث يتم القفز مباشرة إلى مكان تواجد ال label
  • goto كلمة محجوزة لكنها غير مستعملة
#94

جزاك الله خيراً أخي herch

أنا أتسائل عن هذه الجملة:

يمكن تطبيق هذه الجملة الشرطية فقط على الأصناف البدائية primitive types التي تمثل قيمة عددية؟

ماذا تقصد هل تقصد أنه في الجافا لا يمكن عمل switch على string أو enum مثلاً؟

مدونة ابنتي الرضيعة: يوميات رزان

مدونتي التقنية العربية: البرمجة مع عبد المنعم

Technical Blog: Abdul Moniem's Thoughts

LinkedIn: Profile

#95
أحمد عبد المنعم كتب:

ماذا تقصد هل تقصد أنه في الجافا لا يمكن عمل switch على string أو enum مثلاً؟

لا يمكن تطبيق switch على String، أما ال enum فهي تحتوي على قيم int، لذلك فيمكن استعمالها.

هذه بالضبط الأصناف التي يمكن استعمالها مع switch

  • char
  • byte
  • short
  • int
  • Character
  • Byte
  • Short
  • Integer
  • enum type

يبدو أنه سيتم دعم ال String في ال switch في النسخة القادمة java 7

تم تعديل هذه المشاركة بواسطة herch في 19 يوليو 2010 في 23:15

#96

قمت بكتابة الرد من دون ما أرى ردك أخ عصام,, معذرة :D

اقتباس
ماذا تقصد هل تقصد أنه في الجافا لا يمكن عمل switch على string أو enum مثلاً؟

يمكن إستخدام enum طبعا و كذا الwrappers ,,لكن موضوع String أظن أنها سيتم إضافتها في JDK 7

تم تعديل هذه المشاركة بواسطة هويدي في 19 يوليو 2010 في 23:17

#97

جميل أخي herch ..

أظن في هذه النقطة الخلافات بسيطة ..

وهما اثنان ..

1) أن الـ switch في الجافا لم تدعم الـ string بعد عكس السي شارب التي تدعمها.

2) أن كلمة goto في الجافا ليس لها استعمال عكس السي شارب فهي تنقلك للـ label المراد الانتقال لها وهذا مثال عليها:

public static void Main() 
   {
      int x = 200, y = 4;
      int count = 0;
      string[,] myArray = new string[x,y];

      // Initialize the array:
      for (int i = 0; i < x; i++) 
         for (int j = 0; j < y; j++)
            myArray[i,j] = (++count).ToString();      

      // Read input:
      Console.Write("Enter the number to search for: ");

      // Input a string:
      string myNumber = Console.ReadLine();

      // Search:
      for (int i = 0; i < x; i++)
         for (int j = 0; j < y; j++)
            if (myArray[i,j].Equals(myNumber))
               goto Found;

      Console.WriteLine("The number {0} was not found.", myNumber);
      goto Finish;

   Found:
      Console.WriteLine("The number {0} is found.", myNumber);

   Finish: 
      Console.WriteLine("End of search.");
   }

مدونة ابنتي الرضيعة: يوميات رزان

مدونتي التقنية العربية: البرمجة مع عبد المنعم

Technical Blog: Abdul Moniem's Thoughts

LinkedIn: Profile

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…