تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
دعنا نتعرف قليلا على لغة #f جديد لغات vs 2010
#1
كاتب الموضوع : samerselo

أنشئ مشروعا جديدا من النوع F# Application وتأكد من اختيار الفريموورك 4 كالفريموورك الهدف ثم أعط للمشروع اسما ثم انقر OK
يمكننا استخدام Let للتصريح عن متغير وإسناد قيمة له. فمثلا أدخل الكود التالي في الملف program.fs الذي يقوم بتعريف عدة متغيرات كما نلاحظ استخدام الشرطة الأمامية المائلة مرتين من أجل التعليقات كما يجدر الانتباه إلى أن لغة F# حساسة لحالة الأحرف عكس لغة البيزيك

كود :
[color=#000000][COLOR=#0000bb][/color][COLOR=#ff8000]// التصريح عن مغير رقمي وآخر نصي مع إسناد قمية لهما
[/COLOR][color=#0000bb]let anInt [/color][color=#007700]= [/color][COLOR=#0000bb]5
let aString [/COLOR][color=#007700]= [/color][COLOR=#dd0000]"Hello"
[/COLOR][COLOR=#ff8000]// تنفيذ عملية حسابية وتضمين قيمتها في متغير
[/COLOR][color=#0000bb]let anIntSquared [/color][color=#007700]= [/color][color=#0000bb]anInt [/color][color=#007700]* [/color][COLOR=#0000bb]anInt  
[/COLOR][/COLOR]



ومن أجل رؤية نتائج الكود السابق اختر كامل الكود ثم اضغط ALT+Enter فتلاحظ ظهور النتائج في نافذة أسفل نافذة محرر الكود كما يلي

كود :
[color=#000000][COLOR=#0000bb]val anInt [/color][color=#007700]: [/color][color=#0000bb]int [/color][color=#007700]= [/color][COLOR=#0000bb]5
val aString [/COLOR][color=#007700]: [/color][color=#0000bb]string [/color][color=#007700]= [/color][COLOR=#dd0000]"Hello"
[/COLOR][color=#0000bb]val anIntSquared [/color][color=#007700]: [/color][color=#0000bb]int [/color][color=#007700]= [/color][COLOR=#0000bb]25  
[/COLOR][/COLOR]

ومن أجل رؤية النتائج في نافذة الكونسول أدخل الكود التالي مباشرة بعد الكود السابق ثم اضغط Ctrl+F5

كود :
[color=#000000][COLOR=#0000bb]System[/color][color=#007700].[/color][color=#0000bb]Console[/color][color=#007700].[/color][color=#0000bb]WriteLine[/color][color=#007700]([/color][color=#0000bb]anInt[/color][COLOR=#007700])
[/COLOR][color=#0000bb]System[/color][color=#007700].[/color][color=#0000bb]Console[/color][color=#007700].[/color][color=#0000bb]WriteLine[/color][color=#007700]([/color][color=#0000bb]aString[/color][COLOR=#007700])
[/COLOR][color=#0000bb]System[/color][color=#007700].[/color][color=#0000bb]Console[/color][color=#007700].[/color][color=#0000bb]WriteLine[/color][color=#007700]([/color][color=#0000bb]anIntSquared[/color][COLOR=#007700])  
[/COLOR][color=#0000bb][/color][/COLOR]

من أجل تعريف إجرائية بسيطة لحساب مربع عدد يمكننا كتابتها على الشكل

كود :
[color=#000000][COLOR=#0000bb]let square n [/color][color=#007700]= [/color][color=#0000bb]n [/color][color=#007700]* [/color][COLOR=#0000bb]n  
[/COLOR][/COLOR]

ومن أجل استخدام هذه الإجرائية
نكتب الكود التالي

كود :
[color=#000000][COLOR=#0000bb]let result [/color][color=#007700]= [/color][COLOR=#0000bb]square anInt
System[/COLOR][color=#007700].[/color][color=#0000bb]Console[/color][color=#007700].[/color][color=#0000bb]WriteLine[/color][color=#007700]([/color][color=#0000bb]result[/color][COLOR=#007700])  
[/COLOR][color=#0000bb][/color][/COLOR]

ومن أجل كتابة إجرائية تستدعي نفسها يمكن عمل ذلك كما في المثال التالي

كود :
[color=#000000][COLOR=#0000bb]let rec factorial n [/color][COLOR=#007700]=  
    if [/COLOR][color=#0000bb]n [/color][color=#007700]= [/color][COLOR=#0000bb]0  
    then 1  
    [/COLOR][color=#007700]else [/color][color=#0000bb]n [/color][color=#007700]* [/color][color=#0000bb]factorial [/color][color=#007700]([/color][color=#0000bb]n [/color][color=#007700]- [/color][color=#0000bb]1[/color][COLOR=#007700])
[/COLOR][color=#0000bb]System[/color][color=#007700].[/color][color=#0000bb]Console[/color][color=#007700].[/color][color=#0000bb]WriteLine[/color][color=#007700]([/color][color=#0000bb]factorial anInt[/color][COLOR=#007700])  
[/COLOR][color=#0000bb][/color][/COLOR]





مترجم بتصرف، وللموضوع بقية قريبا إن شاء الله
}}}
تم الشكر بواسطة: معاند الحظ , معاند الحظ
#2
كما يمكن تجميع البيانات بطريقة الأنببة tuples كما في الكود

كود :
[color=#000000][COLOR=#0000bb]let turnChoices [/color][color=#007700]= ([/color][color=#dd0000]"right"[/color][color=#007700], [/color][color=#dd0000]"left"[/color][COLOR=#007700])
[/COLOR][color=#0000bb]System[/color][color=#007700].[/color][color=#0000bb]Console[/color][color=#007700].[/color][color=#0000bb]WriteLine[/color][color=#007700]([/color][color=#0000bb]turnChoices[/color][COLOR=#007700])
[/COLOR][COLOR=#ff8000]// Output: (right, left)

[/COLOR][color=#0000bb]let intAndSquare [/color][color=#007700]= ([/color][color=#0000bb]anInt[/color][color=#007700], [/color][color=#0000bb]square anInt[/color][COLOR=#007700])
[/COLOR][color=#0000bb]System[/color][color=#007700].[/color][color=#0000bb]Console[/color][color=#007700].[/color][color=#0000bb]WriteLine[/color][color=#007700]([/color][color=#0000bb]intAndSquare[/color][COLOR=#007700])
[/COLOR][COLOR=#ff8000]// Output: (5,25)  
[/COLOR][color=#0000bb][/color][/COLOR]

أو باستخدام القوائم Lists

كود :
[color=#000000][COLOR=#0000bb][/color][COLOR=#ff8000]// List of best friends.
[/COLOR][color=#0000bb]let bffs [/color][color=#007700]= [ [/color][color=#dd0000]"Susan"[/color][color=#007700]; [/color][color=#dd0000]"Kerry"[/color][color=#007700]; [/color][color=#dd0000]"Linda"[/color][color=#007700]; [/color][color=#dd0000]"Maria" [/color][COLOR=#007700]]  
[/COLOR][color=#0000bb][/color][/COLOR]

كما يمكننا إضافة عنصر جديد للقائمة السابقة باستخدام المعامل كونز :: وتجدر الملاحظة هنا أن القائمة الجديدة في المتغير الجديد وأن القائمة السابقة bffs ثابتة ولا يمكن تغييرها

كود :
[color=#000000][COLOR=#0000bb][/color][COLOR=#ff8000]// Bind newBffs to a new list that has "Katie" as its first element.
[/COLOR][color=#0000bb]let newBffs [/color][color=#007700]= [/color][color=#dd0000]"Katie" [/color][color=#007700]:: [/color][COLOR=#0000bb]bffs  
[/COLOR][/COLOR]

و من أجل إظهار عناصر القائمة نستخدم printfn التي تستخدم لإظهار العناصر الإفرادية للمتغيرات التركيبية

كود :
[color=#000000][COLOR=#0000bb]printfn [/color][color=#dd0000]"%A" [/color][COLOR=#0000bb]bffs
[/COLOR][COLOR=#ff8000]// Output: ["Susan"; "Kerry"; "Linda"; "Maria"]
[/COLOR][color=#0000bb]printfn [/color][color=#dd0000]"%A" [/color][COLOR=#0000bb]newBffs
[/COLOR][COLOR=#ff8000]// Output: ["Katie"; "Susan"; "Kerry"; "Linda"; "Maria"]  
[/COLOR][color=#0000bb][/color][/COLOR]






يتبع
}}}
تم الشكر بواسطة:
#3
الكود التالي يقوم بإنشاء فئة Person تمتلك خاصيتين Name و Age حيث أن الخاصية Name للقراءة فقط immutable كما هو الحال في معظم القيم في هذه اللغة كما يمكنك إنشاء خواص قابلة لتغيير قيمتها mutable عندما تدعو الحاجة لذلك ولكن يجب عليك التصريح أنها متغيرة حيث يتم تخزين الخاصية Age في متغير قابل لتغيير قيمته internalAge انظر الكود

كود :
[color=#000000][COLOR=#0000bb][/color][COLOR=#ff8000]// يتم التصريح عن باني يأخذ متغيرين
/// The declaration creates a constructor that takes two values, name and age.
[/COLOR][color=#0000bb]type Person[/color][color=#007700]([/color][color=#0000bb]name[/color][color=#007700]:[/color][color=#0000bb]string[/color][color=#007700], [/color][color=#0000bb]age[/color][color=#007700]:[/color][color=#0000bb]int[/color][COLOR=#007700]) =
    [/COLOR][COLOR=#ff8000]// يمكن تغيير قيمة العمر لأن المتغير المرتبط بها تم التصريح عنه باستخدام الكلمة المحجوزة  mutable
    // A Person object's age can be changed. The mutable keyword in the
    // declaration makes that possible.
    [/COLOR][color=#0000bb]let mutable internalAge [/color][color=#007700]= [/color][COLOR=#0000bb]age

    [/COLOR][COLOR=#ff8000]// التصريح عن باني ثاني يأخذ وسيطة واحدة هي الاسم وهو يستدعي الباني السابق الذي يأخذ وسيطتين  
    // Declare a second constructor that takes only one argument, a name.
    // This constructor calls the constructor that requires two arguments,
    // sending 0 as the value for age.
    [/COLOR][color=#007700]new([/color][color=#0000bb]name[/color][color=#007700]:[/color][color=#0000bb]string[/color][color=#007700]) = [/color][color=#0000bb]Person[/color][color=#007700]([/color][color=#0000bb]name[/color][color=#007700], [/color][color=#0000bb]0[/color][COLOR=#007700])

    [/COLOR][COLOR=#ff8000]// خاصية للقراءة فقط
    // A read-only property.
    [/COLOR][color=#0000bb]member this[/color][color=#007700].[/color][color=#0000bb]Name [/color][color=#007700]= [/color][COLOR=#0000bb]name

    [/COLOR][COLOR=#ff8000]// خاصية للقراءة والكتابة
    // A read/write property.
    [/COLOR][color=#0000bb]member this[/color][color=#007700].[/color][COLOR=#0000bb]Age
        with get[/COLOR][color=#007700]() = [/color][COLOR=#0000bb]internalAge
        [/COLOR][color=#007700]and [/color][color=#0000bb]set[/color][color=#007700]([/color][color=#0000bb]value[/color][color=#007700]) = [/color][color=#0000bb]internalAge [/color][color=#007700]<- [/color][COLOR=#0000bb]value

    [/COLOR][COLOR=#ff8000]// دالات الفئة
    // Instance methods.

    // زيادة عمر الشخص
    // Increment the person's age.
    [/COLOR][color=#0000bb]member this[/color][color=#007700].[/color][color=#0000bb]HasABirthday [/color][color=#007700]() = [/color][color=#0000bb]internalAge [/color][color=#007700]<- [/color][color=#0000bb]internalAge [/color][color=#007700]+ [/color][COLOR=#0000bb]1

    [/COLOR][COLOR=#ff8000]// اختبر العمر مع قيمة معطاة
    // Check current age against some threshold.
    [/COLOR][color=#0000bb]member this[/color][color=#007700].[/color][color=#0000bb]IsOfAge targetAge [/color][color=#007700]= [/color][color=#0000bb]internalAge [/color][color=#007700]>= [/color][COLOR=#0000bb]targetAge

    [/COLOR][COLOR=#ff8000]// إظهار اسم وعمر الشخص
    // Display the person's name and age.
    [/COLOR][color=#0000bb]override this[/color][color=#007700].[/color][color=#0000bb]ToString [/color][COLOR=#007700]() =  
        [/COLOR][color=#dd0000]"Name:  " [/color][color=#007700]+ [/color][color=#0000bb]name [/color][color=#007700]+ [/color][color=#dd0000]"\n" [/color][color=#007700]+ [/color][color=#dd0000]"Age:   " [/color][color=#007700]+ (string)[/color][COLOR=#0000bb]internalAge  
[/COLOR][/COLOR]

ومن أجل اختبار الفئة السابقة سنقوم بإنشاء غرضين من النوع Person وإجراء بعض التغييرات وإظهار النتائج كما هو موضح بالكود التالي

كود :
[color=#000000][COLOR=#0000bb][/color][COLOR=#ff8000]// التعابير التالية ليست جزءا من الفئة person
// تأكد من أنها تبدأ بـ let
// The following let expressions are not part of the Person class. Make sure
// they begin at the left margin.
[/COLOR][color=#0000bb]let person1 [/color][color=#007700]= [/color][color=#0000bb]Person[/color][color=#007700]([/color][color=#dd0000]"John"[/color][color=#007700], [/color][color=#0000bb]43[/color][COLOR=#007700])
[/COLOR][color=#0000bb]let person2 [/color][color=#007700]= [/color][color=#0000bb]Person[/color][color=#007700]([/color][color=#dd0000]"Mary"[/color][COLOR=#007700])

[/COLOR][COLOR=#ff8000]// تغيير قيمة عمر ماري
// Send a new value for Mary's mutable property, Age.
[/COLOR][color=#0000bb]person2[/color][color=#007700].[/color][color=#0000bb]Age [/color][color=#007700]<- [/color][COLOR=#0000bb]15

[/COLOR][COLOR=#ff8000]// إضافة عام لعمر جون
// Add a year to John's age.
[/COLOR][color=#0000bb]person1[/color][color=#007700].[/color][color=#0000bb]HasABirthday[/color][COLOR=#007700]()

[/COLOR][COLOR=#ff8000]// إظهار النتائج
// Display results.
[/COLOR][color=#0000bb]System[/color][color=#007700].[/color][color=#0000bb]Console[/color][color=#007700].[/color][color=#0000bb]WriteLine[/color][color=#007700]([/color][color=#0000bb]person1[/color][color=#007700].[/color][color=#0000bb]ToString[/color][COLOR=#007700]())
[/COLOR][color=#0000bb]System[/color][color=#007700].[/color][color=#0000bb]Console[/color][color=#007700].[/color][color=#0000bb]WriteLine[/color][color=#007700]([/color][color=#0000bb]person2[/color][color=#007700].[/color][color=#0000bb]ToString[/color][COLOR=#007700]())

[/COLOR][COLOR=#ff8000]// هل عمر ماري يسمح لها بالاقتراع
// Is Mary old enough to vote?
[/COLOR][color=#0000bb]System[/color][color=#007700].[/color][color=#0000bb]Console[/color][color=#007700].[/color][color=#0000bb]WriteLine[/color][color=#007700]([/color][color=#0000bb]person2[/color][color=#007700].[/color][color=#0000bb]IsOfAge[/color][color=#007700]([/color][color=#0000bb]18[/color][COLOR=#007700]))  
[/COLOR][color=#0000bb][/color][/COLOR]
}}}
تم الشكر بواسطة:
#4
هذا موضوع أولي تعريفي بهذه اللغة وربما أقوم لاحقا بإضافة مواضيع أخرى تفصيلية تشرح أكثر جوانب هذه اللغة

مرفق نص الموضوع كاملا حتى هذه النقطة


الملفات المرفقة
.pdf   F_Sharp_First_Article.pdf (الحجم : 165.02 ك ب / التحميلات : 41)
}}}
تم الشكر بواسطة:
#5
يمكنا التعرف على قائمة الكلمات المحجوزة في لغة #F من موقع MSDN على الرابط F# Keyword Reference
}}}
تم الشكر بواسطة:



التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم