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

انتقل من ++C إلى جافا بسلاسة

بدأه مصطفى 36a2 في 22 أغسطس 2013 · 7 رد · 1,676 مشاهدة · في JavaEE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع
السلام عليكم ورحمة الله وبركاته 
اقتباس
بداية : هذا المقال موجّه لمن لديه معرفة مسبقة متوسطة في لغة ++C
الفكرة من هذا المقال(والذي قد يتبع بمقالات أخرى إن شاء الله تعالى )
هو توفير الوقت اللازم لتعلم لغة جافا انطلاقا من معرفتك المسبقة بلغة ++C
لا يمكنني الجزم بأن أي لغة أخرى تعلمتها مسبقاً ستمكنك من قراءة هذا المقال مع الفهم لكل الجزئيات ولكن هذا وارد بنسبة تفوق 70%

 

 

لنبدأ على بركة الله :
برنامج بسيط .. وطباعة Hello World :)
في لغة جافا يجب تغليف كل شيء ضمن صف class ... حتى البرنامج الرئيسي يجب أن يكون ضمن صف 
وصف البرنامج الرئيسي يجب ان يحمل نفس اسم الملف الرئيسي ذو اللاحقة java
وبذلك ستجد أي برنامج جافا يحتوي 
public class FileName { }
 
الدالة الرئيسية اسمها main  تحديداً ويبحث عنها البرنامج الذي سينفذ الكود ليبدأ ...
ولكن لا يكفي أن نكتب القيمة المعادة قبلها void مثلاً
يجب تحديد محددات الرؤية public ويجب تعريفها كstatic  ..
كما أنها يجب أن تأخذ وسيط سلسلة نصية String[]ParamName
هذا قد يزعج المبرمجين المتعودين على حرية main()وفقط في ++C  ...
إذا ستجد في كل برامج جافا الكود التالي :
public class FileName {
public static void main(String[]StringName) {
 
}
}
الآن يمكننا البدء ببرنامجنا الأول ..
الكائن System  يحتوي (من ضمن الامور الكثيرة التي يحتويها) على أغراض ودوال التعامل مع الخرج
من هذه الأغراض objects الغرض out وهو دفق stream الخرج المعياري standard اي الconsole
وبذلك لطباعة أي عبارة او متحول ..  نستعمل 
System.out.print(X);
يوجد تابعان رئيسيان للطباعة print لطباعة المحتوى بشكل طبيعي println يطبع محرف نهاية السطر print line
ومن العمليات الأساسية في لغة جافا عملية سلسلسة السلاسل :D ..أقصد concatenation  وتتم بربط السلاسل ب + 
وكذلك يمكننا ربط سلسلة مع رقم بالعملية + ..
هل تحمست للبدء ؟
يمكنك نحميل بيئة جافا Eclipse من هنا ... اختر Eclipse IDE for Java EE Developers,
ويُفضل أن تتبع الtutorial الموجود فيها لمعرفة كيف تنشئ مشروعا جديدا ..
برنامجنا البسيط :
public class HelloWorld {
public static void main(String[]s) {
int x=0x36a2;
System.out.println("Hello World!"+x);
}
}
سنضيف الآن تابع الدخل ... وهو عمليّا كائن(غرض) من نوع Scanner
ويحتاج في الباني(constructor) إلى وسيط هو دفق Stream الدخل
في لغة جافا لا يوجد مؤشرات ... كما أن الحجز للكائنات دائما يتم بطريقة ديناميكية باستخدام new
بذلك يكون إنشاء الكائن كما يلي:
static Scanner sc = new Scanner(System.in);
الصف Scanner هو صف غير عام ... يحتاج إلى جلب محتواه من الحزمة التالية
java.util.Scanner كما نجلب محتوى مكتبة بواسطة #include
وذلك باستخدام التعليمة import
وبذلك نضيف الكود التالي في رأس البرنامج 
import java.util.Scanner;
والآن ... كيف نجلب المحتوى من الدخل ونخزنه في متحول ؟ 
سيكون هذا باستخدام توابع (طرق methods(الكائن الذي أنشأناه من الصف Scanner
بعض الأمثلة :
int a=sc.nextInt();
byte b=sc.nextByte();
double c=sc.nextDouble();
float d=sc.nextFloat();
System.out.println(a+b+c+d);
المثال السابق سيطبع مجموع الأرقام ... أما إذا أردنا أن يقوم ب concatenation :
int a=sc.nextInt();
byte b=sc.nextByte();
double c=sc.nextDouble();
float d=sc.nextFloat();
System.out.println(""+a+b+c+d);
البرنامج التالي سيأخذ طول الضلعين القائمين في مثلث ويطبع طول
import java.util.Scanner;
public class Tutorial {
static Scanner sc = new Scanner(System.in); 
public static void main(String[]s) {
double c=sc.nextDouble();
double d=sc.nextDouble();
System.out.print("\n"+Math.sqrt(c*c+d*d)+"\n");
}
}
لاحظ استخدام الطريقة sqrt من الصف Math دون انشاء كائن من math وذلك لأنه صف مجرد يسمح باستخدام توابعه دون انشاء كائن منه
لتعريف مصفوفة نستخدم التركيب النحوي التالي 
byte[]b;byte[]c={1,2,113,54,4};
في جافا لا تتم عمليات التحويل بين الانماط بهذه السهولة فمثلاً
byte[]d={1,2,113,541,4};
سيتسبب في خطأ تحويل بين الأنواع... 
هذا قد يبدو غبياً لمبرمجي ++C ولكن بصراحة هذا هو الترتيب والأناقة التي يتحدث عنها جماعة java
لكن ما سيزعجك فعلاً هو أن جملة شرطية مثل
if(1){}
ستسبب خطأ ... عدم القدرة على التحويل من int إلى boolean :P
________________________________________________________
بنى التحكم في سير البرنامج مماثلة تماماً لتلك في C باستثناء عبارة goto فهي غير موجودة 
وهذه بعض الأمثلة ..
byte[]b={1,2,113,54,4};for(int i=0;i<5;i++)System.out.println(b);for(int i=0;i<5;System.out.println(b[i++]))break;int i=0;while(i<10)System.out.print("HI"+i++);do{System.out.println("GO");i++;continue;}while(i<15);if(i<20){System.out.print("الحمد لله");}else{System.out.print("بفضل الله");}
قد تجد أنه من المثير إمكانية كتابة النص باللغة العربية :)
 
إذا انظر إلى هذا :D

ملاحظة : انسخه والصقه في eclipse فهو لا يظهر جيدا هنا.

int متحول=4;System.out.println(متحول);
نكتفي بهذا القدر لليوم ... أرجو أن يكون المقال مفيداً ... وأسأل الله أن يوفقني للمزيد
والله ولي التوفيق

تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 22 أغسطس 2013 في 21:30

3
#2




السلام عليكم ورحمة الله وبركاته

في جافا يمكننا تعريف توابع خاصة بنا لتقوم بـجزء من العمل بشكل مستقل

نقوم بتعريف التابع كما يلي في داخل class الرئيسي والذي يحمل اسم الملف


public static void main(String[]a)//the main method 

{

 

}

public static void function()//new method

{

 

}


لا يتطلب استدعاء التابع أن يكون معرّفاً قبل موضع استدعائه كما في لغة C يكفي أن يكون موجوداً !

ولاستدعائه كما العادة نكتب اسمه ونمرر وسطاءه بين قوسين


function();


والآن لنكتب بعض المحتوى في التابع .. رأينا في المقال السابق أنه لتعريف سلسلة نصية نكتب


String S;


لاحظ أن كلمة String تبدأ بحرف كبير ... وفي java هذا يعني بأن هذا صف class وليس نوعاً عادياً مثل int

ولذلك .. فإن  S يعتبر كائنا وليس متحولاً .... كائن له توابعه وأغراضه

ومن هذه التوابع ...


S.equals(AnotherStringTocompare);


وهو تابع boolean يعيد true عند تساوي السلسلتين النصيتين تماماً ... وfalse عدا ذلك

هذا برنامج ..يعطي مثالاً على إنشاء تابع واستدعائه ..واستخدام التابع equals

 


import java.util.Scanner;

public class Second {

	static Scanner S=new Scanner(System.in);

	public static void main(String[]a)

	{

		function();

	}

	public static void function()

	{

		String a=S.nextLine();

		if(a.equals("السلام عليكم"))

		{

			System.out.println("وعليكم السلام");

		}

		else

		{

			System.out.println("Hello!");

		}

	}

}


ختاماً ... انظر إلى قطعة الكود هذه ما أجملها :)


System.out.println("0x36a2".equals("0x36a2"));





تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 23 أغسطس 2013 في 06:43

3
#3

هذه الفقرة تتحدث عن العمليات Operators ... وهنا ننبه اخوتنا جماعة php  وpython  إلى وجود بعض التعليمات الجديدة عليهم ... 
العمليات في جافا مماثلة تماماً لتلك في C  مع اضافات محدودة ... كما أنه لا يمكن استخدام ! مع النوع int كما ذكرنا ..فهي عملية بوليانية boolean

في هذا الكود أمثلة على بعض العمليات في جافا ...والمطابقة لاستعمالها في C ... 
 

public class Second { 
	public static void main(String[]a)
	{
			function(14);
			
	}
	public static void function(int  a)
	{
		System.out.println(a+"<<1=\t"+(a<<1));//shifting left
		System.out.println(a+"*2=\t"+(a*2));//multiplication
		
		System.out.println(a+">>1=\t"+(a>>1));//shifting right
		System.out.println(a+"/2=\t"+(a/2));//division        
        System.out.println(a+"%5=\t"+(a%5));//modulation
		

		System.out.println(a+"+2=\t"+(a+2));//summation
		System.out.println(a+"-2=\t"+(a-2));//subtraction
		
		System.out.println(a+"^5=\t"+(a^5));//logical xor
		System.out.println(a+"|5=\t"+(a|5));//logical or
		System.out.println(a+"&5=\t"+(a&5));//logical and
		
		System.out.println("~"+a+"=\t"+~a);//logical not
		System.out.println("-"+a+"=\t"+(-a));//unary minus
	}
}

الكود السابق سيطبع ما يلي :

 

اقتباس
14<<1= 28
14*2= 28
14>>1= 7
14/2= 7
14+2= 16
14-2= 12
14^5= 11
14|5= 15
14&5= 4
~14= -15
-14= -14

هناك عملية ازاحة نحو اليمين في جافا <<< تقوم بإزاحة البتات كلها حتى بت الإشارة وتملأ أصفارا على اليسار ...بينما تقوم العملية << بإزاحة البتات ما عدا بت الإشارة ... (هذا ما يحدث في C بالنسبة للعملية <<   )
ولا ننسى التعليمة الثلاثية الرائعة ؟  : ... سترى مثالً عنها في نهاية هذه الفقرة :)
تعليمات الإسناد أيضاً مماثلة لها في C :
 

اقتباس
= += -= *= /= %= &= ^= |= <<= >>= >>>=

ولا ننسى طبعاً عمليتي الزيادة بواحد والانقاص بواحد ... وهما تماماً مثل C  .. ويوجد postfix و prefix   .. .
 

اقتباس
postfix :    expr++ exp--prefix  :    ++expr --expr

وطبعا تعليمات المقارنة المنطقية ... والعمليات المنطقية مطابقة لها في C.. مع وجود اختلاف( هناك عملية في جافا تسمى instanceof ..عملية منطقية تعيد true|false .)
 

اقتباس
< > <= >= instanceof == !=
(logical AND)  &&
(logical OR)   ||

تختبر التعليمة instanceof فيما اذا كان الوسيط الايسر من النوع المذكور على الجانب الايمن للعملية ... وهي مفيدة جدا في حال استعمال الصفوف والوراثة .. باستخدامها يمكمما معرفة فيما اذا كان الكائن وريثاُ لنوع ما ...(نتطرق اليها لاحقا)
_______________________________________________________
أغفلنا في الفقرة السابقة بنية التحكم switch وهي مطابقة لتلك في C  (فلينتبه من تعود استخدام switch في php  فهي لا تقبل الا قيمة int وهناك محددات أخرى )
الكود التالي يبين استخدام switch  ويعطي مثالاً على تابع له قيمة معادة .. ويأخذ وسيطاً ... كما يوضح أن استخدام التوابع مماثل لاستخدامها في C
 

import java.util.Scanner;
public class Second {
	static Scanner S=new Scanner(System.in); 
	public static void main(String[]a)
	{
			System.out.println(talk(S.nextLine()));
			
	}
	public static String talk(String in)
	{
		int x=in.length();
		String out="What?";
		switch(x)
		{
			case 1:out="O";break;
			case 2:out="Hi";break;
			case 3:out="Yes";break;
			case 4:out="Good";break;
			case 5:out="Please";break;
			case 6:out="But why";break;
		}
		return out;
	}
}

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

ختاماً انظر إلى روعة قطعة الكود التالية :

System.out.println(S.nextLine().equals("0x36a2")?"الحمد لله":"الشكر لله");

تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 23 أغسطس 2013 في 20:09

1
#4

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

تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 23 أغسطس 2013 في 06:41

1
#5

أحسن الله إليك

vVIfFr.gif

مدونتي



إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة

فما أحوجني إلى دعوة صالحة من أخ لي كريم

 

http://www.tvquran.com/

 

LoGeCom

أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز 

#6

وإياكم أخي أحمد ... أرجو أن يكون فيه فائدة ... وتوفير وقت على المتعلمين إن شاء الله .. 

#7

السلام عليكم ... 
فيما يلي كود بسيط لتبيان بعض التوابع الهامة في بعض الحزم ...
يجب قراءة الكثير من الاكواد ... وكتابة أكثر ... لاتقان طريقة جافا في التعامل مع الكائنات ...
وبالطبع ... فان طريق الاحتراف يحتاج الى المام واسع بمعظم التوابع والحزم ...
أترككم مع الكود ... ويفترض أن الخرج سيشرح الكود وبالعكس ..وإن كان هناك أي مشكلة ... (بعد أن تقوم بترجمة الكود .. ورؤية المخرجات ... فتفضل بطرح مشكلتك هنا )
 

import java.util.Random;
import java.math.BigInteger;

public class Example {
	public static void main(String[]args){
		Random a=new Random();
		System.out.println(a);
		System.out.println(a.getClass());
		System.out.println(a.nextInt());
		int max =0x36a2;
		System.out.println(a.nextInt(max));
		System.out.println(a.nextGaussian());//White Noise in communication engineer
		
		BigInteger x=new BigInteger("2");
		System.out.println(x.pow(10000));//Don't open your mouth when see the output
		
		String s=x.toString();
		for(int i=0;i<s.length();i++)
			System.out.print(s.charAt(i));//s is a string but we can use it like an array using charAr
		System.out.println();
		
		System.out.println(Integer.parseInt("1234")+1);
	}
}

تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 24 أغسطس 2013 في 17:58

#8

بارك الله بك اخ مصطفى موضوع مفيد

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