تم النشر منذ 22 Aug 2013 (معدل) السلام عليكم ورحمة الله وبركاته بداية : هذا المقال موجّه لمن لديه معرفة مسبقة متوسطة في لغة ++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[i]);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(متحول);نكتفي بهذا القدر لليوم ... أرجو أن يكون المقال مفيداً ... وأسأل الله أن يوفقني للمزيدوالله ولي التوفيق تم تعديل 22 Aug 2013 بواسطه مصطفى 36a2 3 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
0 قام بالرد منذ 22 Aug 2013 (معدل) السلام عليكم ورحمة الله وبركاتهفي جافا يمكننا تعريف توابع خاصة بنا لتقوم بـجزء من العمل بشكل مستقلنقوم بتعريف التابع كما يلي في داخل 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")); تم تعديل 23 Aug 2013 بواسطه مصطفى 36a2 3 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
0 قام بالرد منذ 23 Aug 2013 (معدل) هذه الفقرة تتحدث عن العمليات 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= 2814*2= 2814>>1= 714/2= 714+2= 1614-2= 1214^5= 1114|5= 1514&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")?"الحمد لله":"الشكر لله"); تم تعديل 23 Aug 2013 بواسطه مصطفى 36a2 1 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
0 قام بالرد منذ 23 Aug 2013 (معدل) سنختم هذا المقال هنا ..لنفتح مقالا جديدا بإذن الله ...وذلك لترك مساحة للمناقشة وتجارب الأخوة ... ورجاءً تصحيح أي خطأ .. وإن حدث فهو غير مقصود ..وشكرا لمتابعتكم .والله ولي التوفيق تم تعديل 23 Aug 2013 بواسطه مصطفى 36a2 1 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
0 قام بالرد منذ 23 Aug 2013 أحسن الله إليك 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
0 قام بالرد منذ 23 Aug 2013 وإياكم أخي أحمد ... أرجو أن يكون فيه فائدة ... وتوفير وقت على المتعلمين إن شاء الله .. 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
0 قام بالرد منذ 24 Aug 2013 (معدل) السلام عليكم ... فيما يلي كود بسيط لتبيان بعض التوابع الهامة في بعض الحزم ...يجب قراءة الكثير من الاكواد ... وكتابة أكثر ... لاتقان طريقة جافا في التعامل مع الكائنات ...وبالطبع ... فان طريق الاحتراف يحتاج الى المام واسع بمعظم التوابع والحزم ...أترككم مع الكود ... ويفترض أن الخرج سيشرح الكود وبالعكس ..وإن كان هناك أي مشكلة ... (بعد أن تقوم بترجمة الكود .. ورؤية المخرجات ... فتفضل بطرح مشكلتك هنا ) 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); }} تم تعديل 24 Aug 2013 بواسطه مصطفى 36a2 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
0 قام بالرد منذ 24 Sep 2013 بارك الله بك اخ مصطفى موضوع مفيد 0 شارك هذا الرد رابط المشاركة شارك الرد من خلال المواقع ادناه
تم النشر منذ (معدل)
ملاحظة : انسخه والصقه في eclipse فهو لا يظهر جيدا هنا.
شارك هذا الرد
رابط المشاركة
شارك الرد من خلال المواقع ادناه