الاثنين، 30 يناير 2012

تعلم لغة البرمجة Go بالعربي ( الدرس الخامس )

بسم الله الرحمن الرحيم

الحلقات التكرارية :


تحتوي لغة Go على عدد اقل من بنى التحكم من لغة C , فمثلا لا وجود للحلقة التكرارية while , كما تم أضافة الحلقة range للتعامل مع المصفوفات .

و سنبدأ الدرس بالحلقة التكرارية for و أستخدمتها في لغة Go , بأستخدام هذا المثال :

package main

import "fmt"

func main(){

for i := 0;i<10 ;i++ {

fmt.Println(i)

}

}

سيقوم مثلنا بطباعة الأرقام من 0 إلى 9 , و يجب أن أنبه أن الأقواس "{    } " إجبارية في الحلقة التكرارية for , و تم الأستغناء على القوسين " ( ) " الذي يكونان بعد الكلمة المفتاحية for , حتى أنه لم يعد أستخدمهما أختياري  .



و هذا شرح التصريح الخاص بـ"for" في هذه الحالة :

for i := 0;i<10 ;i++ 


  • for : الكلمة المفتاحية الخاصة بالجملة التكرارية .
  • i :=0 : التصريح عن المتغيرات الخاصة بالعدادت , و التي تستخدم كشرط للمقارنة , و من الممكن التصريح عن القيمة المستخدمة كعداد في سطر مختلف كالتالي :
i := 0
for ;i<10 ;i++ 
  • i<10 : شرط أستمرار الحلقة التكرارية , حيث أن قيمة المتغير i أصغر من 10 , و في حالة أنتهاء الحالة سوف يتم أيقاف الحلقة التكرارية .
  • ++i : المؤثر على متغير العداد , و في حالتنا سوف يتم زيادة قيمة i بواحد في كل دورة للحلقة التكرارية .
و في المثال التالي سوف نحول الحلقة for لما يشابه الحلقة while في لغة C :
package main


import "fmt"

func main() {

   sum := 1

   for ; sum < 1000; {
       sum += sum
    }
    fmt.Println(sum)
}

لقد قمنا بالتصريح عن المتغير الخاص بالعداد في سطر منفرد :
   sum := 1

و تصريح المؤثر على متغير العداد في داخل الحلقة التكرارية و قمنا بترك المكان المخصص لها في تصريح الحلقة التكرارية for فارغ و أكتفينا بتصريح الشطر لأستمرار دوارن الحلقة التكرارية فقط  :
   for ; sum < 1000; {
       sum += sum
    }



أذا سبق أن برمجة باللغة C فلابد أنك لاحظت الشبه بين هذه الحلقة و الحلقة While , كما يمكنك أختصار التصريح التالي بحذف ";" من الحلقة ليصبح كالتالي :

   sum := 1

   for  sum < 1000 {
       sum += sum
    }



في بعض الحالة يريد المبرمج صنع حلقة تكرارية غير محدودة , أي أنها تتكرر بشكل غير محدود , لذا في لغة Go كل ما يلزم هو ترك الحلقة التكرارية for من دون معاملات كالتالي :
package main

func main() {

    for ; ; {

    }

}

كما في مثالنا السابق تستطيع حذف الحرف ";" كالتالي :
package main

func main() {

    for {
    }
}


و الأن إلى شرح الخاصية range الخاصة بالمصفوفات في لغة Go , و لكن سوف نتطرق إلى هذا المثال البسيط للحصول على عناصر من مصفوفة معرفة في لغة Go بأستخدام الحلقة for العادية :

package main

import "fmt"

var pow = []int{1, 2, 4, 8, 16, 32, 64, 128}

func main() {

    for i:=0;i<7;i++ {

        fmt.Printf("%d)%d\n",i,pow[i])

    }

}

قمنا بأستخدام المتغير i في الحلقة التكرارية للحصول على جميع العناصر في المصفوفة pow :

 for i:=0;i<7;i++ {

        fmt.Printf("%d)%d\n",i,pow[i])

    }


و الأن إلى نفس المثال بأستخدام range كالتالي :
package main



import "fmt"



var pow = []int{1, 2, 4, 8, 16, 32, 64, 128}



func main() {

    for i, v := range pow {

        fmt.Printf("%d)%d\n", i, v)

    }

}

تعيد الدالة range قيمة رقمية خاصة برقم العنصر في المصفوفة , و قيمة العنصر و تستمر في الدوارن في المصفوفة إلى النهاية بأستخدام الحلقة for  :

    for i, v := range pow {fmt.Printf("%d)%d\n", i, v) }

و  هذا مثال أخر عن الدالة range و أستخدمتها , حيث سنتيتخدمها للتعامل مع متغير من النوع string الذي هو في الحقيقة عبارة عن مصفوفة من الحروف :

package main

import "fmt"

func main() {

var i string ="Hello,World!"

for _,a := range i {fmt.Printf("%c\n",a)}


}

تلاحظ أننا أسمينا المتغير الخاص برقم العنصر في المصفوفة بـ"_" , و الذي يرمز في اللغة للمتغيرات التي لا تحتاجها و التي تعيدها الدوال مثل range و سيتم تجاهلها في وقت الترجمة:

for _,a := range i {fmt.Printf("%c\n",a)}

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

ليست هناك تعليقات:

إرسال تعليق