← يتطلب: قواعد البيانات الكائنية الأساسيات مبتدئ ⏱ 8 ساعات الدورة 03

مقدمة في لغة ObjectScript

Introduction to ObjectScript

🎯 أهداف التعلم

1فهم بنية لغة ObjectScript وقواعدها الأساسية
2تعلم المتغيرات وأنواعها وكيفية التعامل معها
3فهم المصفوفات (Arrays) وGlobals
4تعلم تعريف الدوال والطرق (Methods)
5فهم نظام المعالجة والاستثناءات
6تعلم التعامل مع ملفات الإدخال والإخراج
01

أساسيات لغة ObjectScript

لغة ObjectScript هي اللغة البرمجية الأساسية لمنصة IRIS. تجمع بين ميزات البرمجة الإجرائية والكائنية، وتتميز بسهولة التعامل مع قواعد البيانات.

القواعد الأساسية

  • الأوامر تبدأ بحرف كبير (Write, Set, Do)
  • المتغيرات تبدأ بحرف ($) للدوال المدمجة
  • التعليقات تبدأ بـ // أو ;
  • الأسطر المتعددة تفصل بـ ! أو #
// أوامر الكتابة الأساسية
Write "مرحباً بالعالم", !
Write "الاسم: ", name, !
Write "القيمة: ", 42 * 2, !

// الأوامر الأساسية
Set x = 10              // تعيين قيمة
Set y = 20
Write x + y             // طباعة: 30

// التعليقات
// هذا تعليق على سطر واحد
/* هذا تعليق
   على عدة أسطر */

// أوامر التحكم
If x > 5 {
    Write "x أكبر من 5", !
} ElseIf x = 5 {
    Write "x يساوي 5", !
} Else {
    Write "x أصغر من 5", !
}
02

المتغيرات والقيم

في ObjectScript، المتغيرات لا تحتاج إلى إعلان مسبق. يمكن تعيين أي قيمة لأي متغير.

أنواع المتغيرات

  • Local Variables: متغيرات محلية تبدأ بـ % أو حرف عادي
  • Global Variables: متغيرات عامة تبدأ بـ ^
  • Process-Private Globals: خاصة بالعملية وتبدأ بـ ^||
// المتغيرات المحلية
Set name = "أحمد"
Set age = 30
Set isActive = 1

// المتغيرات العامة (موجودة في قاعدة البيانات)
Set ^Config("AppName") = "نظام المستشفى"
Set ^Config("Version") = "2.0"

// العمليات الحسابية
Set a = 10
Set b = 3
Write a + b      // 13
Write a - b      // 7
Write a * b      // 30
Write a / b      // 3.3333
Write a # b      // 1 (باقي القسمة)
Write a ** b     // 1000 (الأسس)

// العمليات النصية
Set greeting = "مرحباً"
Set name = "أحمد"
Set full = greeting _ " " _ name    // الربط بـ _
Write $LENGTH(full)                  // طول النص
Write $EXTRACT(full, 1, 6)          // جزء من النص
Write $TRANSLATE(full, "أ", "a")    // استبدال
⚠️ تنبيه

المتغيرات العامة (Global Variables) تُخزن في قاعدة البيانات وتبقى موجودة حتى بعد إنهاء الجلسة. استخدمها بحذر للمعلومات التي تريد الاحتفاظ بها.

03

المصفوفات والGlobals

المصفوفات في ObjectScript تُعرف باستخدام الأقواس، وهي في الحقيقة عبارة عن شجرة بيانات (Tree) يمكن أن تحتوي على مستويات متعددة.

// مصفوفة بسيطة
Set fruits(1) = "تفاح"
Set fruits(2) = "برتقال"
Set fruits(3) = "موز"

// مصفوفة متعددة الأبعاد
Set matrix(1,1) = "أ"
Set matrix(1,2) = "ب"
Set matrix(2,1) = "ج"
Set matrix(2,2) = "د"

// مصفوفة مرتبطة (Associative Array)
Set student("name") = "سارة"
Set student("grade") = "A"
Set student("courses") = 5

// المرور على عناصر المصفوفة
Set key = ""
For {
    Set key = $ORDER(fruits(key))
    Quit:key=""
    Write key, ": ", fruits(key), !
}

// استخدام $QUERY لاستكشاف المصفوفة
Set ref = ""
For {
    Set ref = $QUERY(@ref)
    Quit:ref=""
    Write ref, " = ", @ref, !
}

// العمليات على المصفوفات
Write $DATA(fruits(1))         // 1 = موجود
Write $ORDER(fruits(""))       // أول مفتاح
Write $ORDER(fruits(99), -1)   // آخر مفتاح
04

الدوال والطرق (Methods)

يمكن تعريف الدوال والطرق داخل الفئات أو كدوال مستقلة.

// طريقة في فئة
Class MyApp.Calculator
{
    /// جمع عددين
    ClassMethod Add(a As %Numeric, b As %Numeric) As %Numeric
    {
        Quit a + b
    }
    
    /// حساب المضروب
    ClassMethod Factorial(n As %Integer) As %Integer
    {
        If n <= 1 Quit 1
        Quit n * ..Factorial(n - 1)
    }
    
    /// طريقة مثيلة (Instance Method)
    Method GetName() As %String
    {
        Quit ..Name
    }
}

// استدعاء الدوال
Set result = ##class(MyApp.Calculator).Add(10, 20)
Write "الناتج: ", result, !    // 30

Set fact = ##class(MyApp.Calculator).Factorial(5)
Write "5! = ", fact, !          // 120

// دوال مستقلة (ليس داخل فئة)
ClassMethod ValidateEmail(email As %String) As %Boolean
{
    If email = "" Quit 0
    If '$FIND(email, "@") Quit 0
    If '$FIND(email, ".") Quit 0
    Quit 1
}
05

معالجة الاستثناءات

توفر ObjectScript نظام معالجة أخطاء يعتمد على TRY-CATCH وأوامر传统的 مثل $ZTRAP.

// استخدام TRY-CATCH
Class MyApp.FileProcessor
{
    ClassMethod ReadFile(filename As %String) As %Status
    {
        Try {
            Set file = ##class(%File).%New(filename)
            Set status = file.Open("R")
            If $$$ISERR(status) {
                Throw ##class(%Exception.General).%New("فشل فتح الملف")
            }
            
            While 'file.AtEnd {
                Set line = file.ReadLine()
                Write line, !
            }
            
            Do file.Close()
            Quit $$$OK
        }
        Catch ex {
            Write "خطأ: ", ex.DisplayString(), !
            Write "في السطر: ", ex.Location, !
            Quit $$$ERROR($$$GeneralError, ex.DisplayString())
        }
    }
}

// معالجة حالات الخطأ
ClassMethod SafeDivide(a As %Numeric, b As %Numeric) As %Numeric
{
    Try {
        If b = 0 {
            Throw ##class(%Exception.General).%New("القسمة على صفر")
        }
        Quit a / b
    }
    Catch ex {
        Write "خطأ في القسمة: ", ex.Name, !
        Quit 0
    }
}
ℹ️ معلومة

استخدم $$$OK للإشارة إلى نجاح العملية، و$$$ERROR للإشارة إلى فشلها. هذا هو الاتفاقي القياسي في IRIS.

06

الدوال المدمجة

توفر ObjectScript مجموعة واسعة من الدوال المدمجة التي تبدأ بعلامة الدولار $.

// دوال النصوص
Write $LENGTH("مرحباً")           // 6
Write $EXTRACT("مرحباً", 1, 3)   // "مرح"
Write $FIND("مرحباً", "حبا")     // 4
Write $TRANSLATE("abc", "a", "x") // "xbc"
Write $ZCONVERT("abc", "U")       // "ABC"
Write $JUSTIFY(42, 10)            // "        42"

// دوال التاريخ والوقت
Write $HOROLOG                     // التاريخ بפורمت $H
Write $ZDATE($HOROLOG, 3)         // "2024-03-15"
Write $ZTIME($PIECE($HOROLOG, ",", 2)) // الوقت
Write $NOW()                       // الطابع الزمني

// دوال رياضية
Write $RANDOM(100)                 // عدد عشوائي من 0 إلى 99
Write $FACTORIAL(5)               // 120
Write $ZABS(-10)                  // 10
Write $ZSQRT(16)                  // 4

// دوال النظام
Write $NAMESPACE                   // المساحة الحالية
Write $USERNAME                    // اسم المستخدم
Write $ROLES                       // الأدوار
Write $JOB                         // رقم العملية

📝 اختبار التحقق

1 كيف تبدأ المتغيرات العامة في ObjectScript؟
A بعشرة %
B بحرف ^
C بحرف _
D بـ var
💡 الشرح

المتغيرات العامة تبدأ بحرف ^ وتُخزن في قاعدة البيانات.

2 ما هو الأمر المستخدم لتعيين قيمة لمتغير؟
A Let
B Set
C Var
D Assign
💡 الشرح

أمر Set هو المستخدم لتعيين القيم للمتغيرات في ObjectScript.

3 كيف يتم ربط النصوص في ObjectScript؟
A بعشرة +
B بعشرة &
C بعشرة _
D بعشرة ..
💡 الشرح

علامة الربط _ تُستخدم لربط النصوص في ObjectScript.

💡 النقاط الرئيسية

  • ObjectScript هي اللغة الأساسية لمنصة IRIS
  • المتغيرات العامة (^) تُخزن في قاعدة البيانات
  • المصفوفات هي شجرة بيانات متعددة المستويات
  • TRY-CATCH هو النظام الحديث لمعالجة الأخطاء
  • الدوال المدمجة تبدأ بعلامة الدولار $