٢٠ مارس ٢٠٢١

الدالّة "Eval" لتنفيذ الشيفرة البرمجية

تنفذ الدالّة Eval المضمّنة في اللغة الشيفرات البرمجية المُمرّرة لها كسلسلة نصية string.

وصياغتها هكذا:

let result = eval(code);

فمثلًا:

let code = 'alert("Hello")';
eval(code); // Hello

يمكن أن تكون الشيفرة المُمررة للدالّة كبيرة وتحتوي على فواصل أسطر وتعريف دوالّ ومتغيّرات، وما إلى ذلك.

ولكن نتيجة الدالّة Eval هي نتيجة آخر عبارة منفذة في الشيفرة.

وإليك المثال التالي:

let value = eval('1+1');
alert(value); // 2
let value = eval('let i = 0; ++i');
alert(value); // 1

تُنفذّ الشيفرة في البيئة الحالية للدالّة، ولذا فيمكنها رؤية المتغيرات الخارجية:

let a = 1;

function f() {
  let a = 2;

  eval('alert(a)'); // 2
}

f();

كما يمكنها تعديل المتغيّرات الخارجية أيضًا:

let x = 5;
eval("x = 10");
alert(x); // النتيجة: ‫10، تعدلت القيمة بنجاح

في الوضع الصارم، تملك الدالّة Eval بيئة متغيّرات خاصة بها. لذا فلن تظهر الدوالّ والمتغيرات، المعرفة -داخل الدالة- للخارج وإنما ستبقى بداخلها:

// تذكر أن في الوضع الصارم يُشغّلُ تلقائيًا في الأمثلة الحيّة
eval("let x = 5; function f() {}");

alert(typeof x); // undefined (المتحول غير مرئي هنا)
// ‫الدالّة f غير مرئية هنا أيضًا

بدون تفعيل “الوضع صارم”، لن يكون للدالّة Eval بيئة متغيرات خاصة بها، ولذلك سنرى المتغيّر x والدالّة f من خارج الدالّة.

استخدامات الدالّة “Eval”

في طرق البرمجة الحديثة، نادرًا ما تستخدم الدالّة Eval. وغالبًا ما يقال عنها أنها أصل الشرور.