JavaScript: أساسيات اللغة، React Native وتطوير الأجهزة المحمولة

المؤلف: IT Sectr نُشر: 2026-02-10 وقت القراءة: 11 دق

JavaScript هي لغة برمجة أصبحت الأساس لفئة كاملة من التقنيات المحمولة الهجينة. React Native و Ionic و Apache Cordova والعديد من الأطر الأخرى تسمح بإنشاء تطبيقات محمولة بلغة JS باستخدام مجموعة تقنيات موحدة مع تطوير الويب. في الوقت نفسه، تظل JavaScript اللغة الأكثر استخداماً للعام العاشر على التوالي وفقاً لاستطلاع Stack Overflow (2025). انظر التفاصيل في نتائج استطلاع Stack Overflow.

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

  • JavaScript — لغة الويب التي أصبحت أساس التطوير المحمول الهجين
  • React Native — عرض واجهة المستخدم الأصلي عبر جسر JS مع مكونات أصلية
  • Ionic/Cordova — نهج WebView مع HTML/CSS/JS داخل حاوية
  • غير المتزامن — event loop، Promise، async/await للإدخال/الإخراج غير المحظور
  • Node.js — منصة خادم توسع JS خارج المتصفح

ما هي JavaScript؟

JavaScript (JS) هي لغة برمجة عالية المستوى مع كتابة ديناميكية، وراثة نموذجية ودوال ككائنات من الدرجة الأولى. أنشأها Brendan Eich في عام 1995 في 10 أيام. وهي واحدة من اللغات الثلاث الأساسية لتقنيات الويب (HTML، CSS، JS) وأساس منصة Node.js من جانب الخادم (2009)، التي سمحت لـ JS بالخروج من المتصفح.

في تطوير الأجهزة المحمولة، تُستخدم JavaScript في ثلاثة نماذج: الترجمة الأصلية (React Native مع Hermes/JSC)، حاويات WebView (Ionic، Cordova) و JS من جانب الخادم (Node.js + Express للخلفية). React Native هي التقنية المهيمنة: وفقاً لـ Statista (2025)، 38% من المشاريع عبر المنصات تستخدم React Native، تليها Flutter (46%).

السمة الرئيسية لـ JavaScript هي نموذج التنفيذ أحادي الخيط مع إدخال/إخراج غير محظور. يسمح event loop بمعالجة آلاف العمليات غير المتزامنة في خيط واحد دون إنشاء خيوط نظام التشغيل. هذا يجعل JS فعالاً للتطبيقات المكثفة في الإدخال/الإخراج (طلبات الشبكة، عمليات قاعدة البيانات)، لكنه يتطلب الحذر مع الحسابات المكثفة للمعالج.

معايير JavaScript: ES5، ES6، ES2025

معيار ECMAScript (ES) يحدد مواصفات JavaScript. ES6 (2015) قدم let/const، دوال السهم، الفئات، الوحدات، Promise. ES2020 — Optional Chaining (?.)، Nullish Coalescing (??). ES2023 — Array findLast، Hashbang Grammar. المحركات الحديثة Hermes (React Native) و V8 (Node.js) تدعم ES2022+. React Native Hermes يدعم ES2020+ مع بعض القيود على Proxy و Symbol.

إصدار ESالسنةالميزات الرئيسيةدعم RN
ES62015let/const، Promise، class، modules، arrow functionsكامل
ES82017async/await، Object.entriesكامل
ES20202020Optional Chaining، Nullish Coalescing، BigIntكامل
ES20222022Top-level await، .at()، Error CauseHermes محدود

قواعد JavaScript: الأنواع، الدوال والنماذج الأولية

قواعد JavaScript تشبه لغة C، ذات كتابة ديناميكية. يتم تحديد نوع المتغير حسب القيمة ويمكن أن يتغير أثناء التشغيل. let و const (ES6) حلت محل var للنطاق الكتلي. الأنواع البدائية: string، number، boolean، null، undefined، symbol، bigint. كل شيء آخر هو كائن (object، array، function، date، regexp).

الدوال ككائنات من الدرجة الأولى

JavaScript هي لغة ذات دوال ذات ترتيب أعلى. يمكن تعيين الدوال للمتغيرات، تمريرها كوسائط، إرجاعها من دوال أخرى. دوال السهم (=>) ليس لها this خاص بها — ترث this من السياق الخارجي. الإغلاق (closure) هو دالة تتذكر المتغيرات من النطاق الذي أنشئت فيه.

javascript
// أنواع البيانات والدوال في JavaScript
// الأنواع البدائية
const name = 'React Native';
let version = 0.71;
var isActive = true; // var مهمل

// الكائنات والمصفوفات
const app = {
  platform: 'iOS',
  version: 15,
  getInfo() {
    return `${this.platform} ${this.version}`;
  }
};

const items = ['Dart', 'Kotlin', 'Swift'];

// دالة من الدرجة الأعلى
function filterByVersion(apps, minVersion) {
  return apps.filter(app => app.version >= minVersion);
}

// الإغلاق (closure)
function createCounter() {
  let count = 0;
  return function() {
    return ++count;
  };
}

const counter = createCounter();
console.log(counter()); // 1
console.log(counter()); // 2

// عامل الانتشار لنسخ الكائنات
const newApp = { ...app, version: 16 };

عامل الانتشار ... ينشئ نسخة سطحية من كائن. التدمير (const { platform, version } = app) يستخرج الحقول إلى متغيرات. دالة السهم في filterByVersion أقصر من تعبير function ولا تنشئ this خاص بها — هذا أمر بالغ الأهمية في مكونات React Native حيث يشير this إلى فئة المكون.

الوراثة النموذجية

JavaScript تستخدم الوراثة النموذجية، وليس الوراثة الطبقية مثل Java أو C#. الفئات (ES6) هي سكر نحوي فوق النماذج الأولية. كل كائن لديه مرجع داخلي [[Prototype]] لكائن آخر. عند الوصول إلى خاصية غير موجودة في الكائن، يبحث عنها JS في سلسلة النماذج. بناء جملة الفئات (extends، super) يجعل الكود أكثر قابلية للقراءة، لكن تحت الغطاء تبقى النماذج.

javascript
// الفئات في JavaScript — سكر نحوي
class PlatformService {
  // حقل خاص (ES2022)
  #apiKey;

  constructor(name, apiKey) {
    this.name = name;
    this.#apiKey = apiKey;
  }

  // طريقة ثابتة
  static getPlatforms() {
    return ['iOS', 'Android'];
  }

  // محصل (Getter)
  get info() {
    return `${this.name} SDK`;
  }

  // طريقة غير متزامنة
  async initialize() {
    return await this.#validateKey();
  }

  #validateKey() {
    return this.#apiKey.length > 10;
  }
}

// الوراثة
class AndroidService extends PlatformService {
  constructor(apiKey) {
    super('Android', apiKey);
  }
}

الحقول الخاصة #apiKey (ES2022) توفر تغليفاً حقيقياً، غير متاح مع اتفاقيات _ الشرطة السفلية. الطريقة الثابتة getPlatforms تنتمي للفئة، وليس للكيان. المحصل info يُحسب عند الوصول. async/await يجعل الكود غير المتزامن خطياً. React Native Hermes يدعم الحقول الخاصة منذ الإصدار 0.71.

غير المتزامن في JavaScript: Event Loop و Promise

غير المتزامن في JavaScript يعتمد على event loop — حلقة لا نهائية تتحقق من مكدس الاستدعاءات وقوائم المهام. مكدس الاستدعاءات يعالج الكود المتزامن، microtask queue يعالج Promise.then/catch/finally، macrotask queue يعالج setTimeout، setInterval، الإدخال/الإخراج. يأخذ event loop المهام من microtask أولاً، ثم من macrotask. حظر مكدس الاستدعاءات (حلقة لا نهائية) يوقف واجهة المستخدم بأكملها.

Promise هو كائن يمثل قيمة مستقبلية. يمكن أن يكون الوعد pending (معلق)، fulfilled (مُنجز)، rejected (مرفوض). سلسلة .then().catch().finally() تعالج النتيجة غير المتزامنة. async/await (ES8) هو سكر نحوي: دالة async تُرجع Promise، await يوقف التنفيذ حتى يتم حل الوعد دون حظر الخيط.

javascript
// تحميل البيانات غير المتزامن في React Native
import React, { useState, useEffect } from 'react';
import { View, Text, ActivityIndicator } from 'react-native';

function UserProfile({ userId }) {
  const [user, setUser] = useState(null);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    let cancelled = false;

    async function fetchUser() {
      try {
        const response = await fetch(
          `https://api.example.com/users/${userId}`
        );

        if (!response.ok) {
          throw new Error('Network error');
        }

        const data = await response.json();

        if (!cancelled) {
          setUser(data);
          setLoading(false);
        }
      } catch (error) {
        if (!cancelled) {
          console.error('فشل الجلب:', error);
          setLoading(false);
        }
      }
    }

    fetchUser();

    return () => { cancelled = true; };
  }, [userId]);

  if (loading) return <ActivityIndicator />;

  return (
    <View>
      <Text>{user?.name ?? 'Unknown'}</Text>
    </View>
  );
}

الخطاف useEffect مع دالة async fetchUser يقوم بطلب HTTP عند تركيب المكون. العلم cancelled يمنع setState بعد إلغاء التركيب — مشكلة شائعة في React Native. Optional Chaining user?.name و Nullish Coalescing ?? يعالجان undefined دون أخطاء. ActivityIndicator يظهر أثناء التحميل — نمط غير متزامن مألوف لكل مطور JS.

React Native: JavaScript على المنصات المحمولة

React Native هو إطار من Meta (Facebook) لإنشاء تطبيقات محمولة أصلية بلغة JavaScript. على عكس نهج WebView، يقوم React Native بعرض مكونات أصلية حقيقية (UIView لنظام iOS، ViewGroup لنظام Android). يتم تنفيذ كود JS في خيط منفصل (Hermes أو JSC) ويتواصل مع خيط واجهة المستخدم الأصلي عبر Bridge (معمارية قديمة) أو JSI (معمارية Fabric الجديدة).

معمارية React Native

React Native يتكون من خيط JS (الكود الخاص بك)، خيط أصلي (واجهة المستخدم) و Bridge/JSI للتفاعل بينهما. في المعمارية القديمة (Bridge)، يتم تسلسل رسائل JSON ونقلها بشكل غير متزامن — مما يخلق تأخيرات أثناء الرسوم المتحركة السريعة. المعمارية الجديدة Fabric (React Native 0.68+) تستخدم JSI (JavaScript Interface) — تفاعل مباشر لـ JS مع كائنات C++ بدون تسلسل.

javascript
// مكون React Native مع API أصلي
import React, { useState, useEffect } from 'react';
import {
  View, Text, TouchableOpacity, Platform,
  PermissionsAndroid, Alert
} from 'react-native';
import Geolocation from '@react-native-community/geolocation';

function LocationTracker() {
  const [location, setLocation] = useState(null);

  useEffect(() => {
    requestLocationPermission();
  }, []);

  async function requestLocationPermission() {
    if (Platform.OS === 'android') {
      const granted = await PermissionsAndroid.request(
        PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION
      );
      if (granted !== PermissionsAndroid.RESULTS.GRANTED) {
        Alert.alert('Permission denied');
        return;
      }
    }
    getCurrentPosition();
  }

  function getCurrentPosition() {
    Geolocation.getCurrentPosition(
      pos => setLocation({
        lat: pos.coords.latitude,
        lng: pos.coords.longitude
      }),
      error => Alert.alert('Error', error.message),
      { enableHighAccuracy: true, timeout: 15000 }
    );
  }

  return (
    <View>
      <Text>Lat: {location?.lat ?? 'N/A'}</Text>
      <Text>Lng: {location?.lng ?? 'N/A'}</Text>
      <TouchableOpacity onPress={getCurrentPosition}>
        <Text>Update Location</Text>
      </TouchableOpacity>
    </View>
  );
}

المكون LocationTracker يوضح العمل مع API الموقع الأصلي. Platform.OS يميز بين Android و iOS. PermissionsAndroid.request هو حوار الأذونات الأصلي لنظام Android. Geolocation.getCurrentPosition — وحدة من @react-native-community/geolocation، مثبتة عبر npm. يوفر React Native واجهات JS للكاميرا والبلوتوث ومقياس التسارع وأجهزة استشعار أخرى.

Ionic و Cordova: حاويات WebView

Ionic هو إطار للتطبيقات المحمولة الهجينة يستخدم WebView لعرض HTML/CSS/JS. على عكس React Native، لا ينشئ Ionic مكونات أصلية — يعمل التطبيق داخل حاوية ويب (WebView) على iOS (WKWebView) و Android (Android WebView). يوفر هذا إعادة استخدام بنسبة 100% لكود الويب ولكن يحد من أداء الرسوم المتحركة المعقدة.

Apache Cordova هو أساس Ionic، يوفر الوصول إلى واجهات برمجة التطبيقات الأصلية عبر إضافات JavaScript. الكاميرا، GPS، جهات الاتصال، نظام الملفات — كل شيء متاح عبر cordova-plugin-*. Ionic 7+ يستخدم Capacitor — خليفة Cordova بأداء أفضل، دعم ESM ووصول مباشر إلى iOS/Android SDK عبر Swift و Kotlin.

الخاصيةReact NativeIonic (Capacitor)Cordova
عرض واجهة المستخدممكونات أصليةWebView (WKWebView)WebView
اللغةJS/TSJS/TS + HTML/CSSJS/TS + HTML/CSS
واجهات برمجة أصليةBridge/JSI + وحداتCapacitor PluginsCordova Plugins
الأداءعالٍ (60 إطار في الثانية)متوسط (يعتمد على WebView)متوسط
حجم APK~25-40 ميجابايت~10-15 ميجابايت~8-12 ميجابايت
إعادة الاستخدام~60% من الكود~95% من الكود مع النسخة الإلكترونية~95%

أدوات مطور JavaScript

أدوات مطوري JS للتطبيقات المحمولة تشمل Node.js، npm/yarn، Expo، React Native CLI و Metro bundler. Node.js هي بيئة تشغيل JS خارج المتصفح، أساس النظام البيئي. npm (Node Package Manager) هو مدير حزم مع أكثر من 2 مليون مكتبة. npx هي أداة لتشغيل حزم npm بدون تثبيت.

النظام البيئي للأدوات

Expo هي طبقة فوق React Native تبسط التطوير: لا تتطلب Xcode/Android Studio للبدء، توفر Managed Workflow مع مكتبات مثبتة مسبقاً. Expo Application Services (EAS) — بناء ونشر في السحابة. Metro هو باندلر React Native الذي يجمع كود JS والتبعيات في ملف واحد. Hermes هو محرك JS من Meta محسّن للأجهزة المحمولة مع ترجمة AOT.

javascript
// package.json — تكوين مشروع React Native
{
  "name": "MyMobileApp",
  "version": "1.0.0",
  "scripts": {
    "start": "npx react-native start",
    "android": "npx react-native run-android",
    "ios": "npx react-native run-ios",
    "test": "jest",
    "lint": "eslint . --ext .ts,.tsx"
  },
  "dependencies": {
    "react": "^18.2.0",
    "react-native": "^0.73.0",
    "@react-navigation/native": "^6.1.0",
    "@react-native-community/geolocation": "^3.2.0"
  },
  "devDependencies": {
    "jest": "^29.7.0",
    "eslint": "^8.56.0",
    "metro-react-native-babel-preset": "^0.77.0"
  }
}

ملف package.json هو أساس أي مشروع JS. البرامج النصية start، android، ios تشغل باندلر Metro والبناء. تنقسم التبعيات إلى dependencies (وقت التشغيل) و devDependencies (اختبارات، أدوات تحليل). React Navigation هو الموجه القياسي. Jest هو إطار اختبار. ESLint هو محلل ثابت يتحقق من نمط الكود والأخطاء المحتملة.

الأسئلة الشائعة

ما هي JavaScript؟

JavaScript (JS) هي لغة برمجة ذات كتابة ديناميكية، وراثة نموذجية ونموذج event loop أحادي الخيط. أنشئت في عام 1995. في التطوير المحمول تُستخدم عبر React Native (مكونات أصلية + منطق JS) و Ionic (حاوية WebView). هي اللغة الأكثر استخداماً للعام العاشر على التوالي وفقاً لبيانات Stack Overflow.

كيف تعمل JavaScript في React Native؟

React Native ينفذ JS في خيط منفصل (Hermes أو JSC). خيط JS يدير المنطق والحالة، الخيط الأصلي يعرض مكونات واجهة المستخدم. يتم تبادل البيانات عبر Bridge (معمارية قديمة، تسلسل JSON) أو JSI (معمارية Fabric الجديدة، وصول مباشر إلى C++). Hermes هو محرك JS من Meta مع ترجمة AOT يقلل وقت بدء التشغيل بنسبة 50%.

كيف تختلف JavaScript عن TypeScript؟

JavaScript ذات كتابة ديناميكية — تُفحص الأنواع في وقت التشغيل. TypeScript تضيف كتابة ثابتة مع فحص في وقت الترجمة، واجهات، أدوية وتعدادات. أي كود JS هو كود TypeScript صالح. يتم ترجمة TS (نقل) إلى JS نقي عبر tsc أو Babel. في React Native، تُستخدم TS في ~65% من المشاريع الجديدة.

ما هي أطر الأجهزة المحمولة التي تستخدم JavaScript؟

الرئيسية: React Native (Meta) — منصة عرض أصلية مع Bridge/Fabric. Ionic (Capacitor) — حاوية WebView مع وصول إلى واجهات برمجة أصلية عبر الإضافات. Apache Cordova — سلف Ionic، أيضاً WebView. NativeScript — وصول مباشر إلى واجهات برمجة أصلية بدون WebView. Expo — طبقة فوق React Native للنمذجة السريعة بدون إعداد بناء أصلي.

ما هو غير المتزامن في JavaScript؟

غير المتزامن في JS يعتمد على event loop: مكدس الاستدعاءات (كود متزامن) ← microtask queue (Promise.then) ← macrotask queue (setTimeout، إدخال/إخراج). Promise هو كائن للعمليات غير المتزامنة. async/await هو سكر نحوي فوق Promise. النموذج أحادي الخيط لا يحجب واجهة المستخدم، لكن المهام المكثفة للمعالج تتطلب Web Workers أو خيطاً منفصلاً (في React Native — InteractionManager).

الملخص

  • JavaScript — لغة عالمية للتطوير المحمول الهجين عبر React Native و Ionic
  • React Native يعرض مكونات أصلية عبر Bridge/JSI مع منطق JS في خيط منفصل
  • Event Loop — نموذج غير متزامن أحادي الخيط مع Promise و async/await لإدخال/إخراج غير محظور
  • Hermes — محرك JS من Meta مع ترجمة AOT، يُستخدم في React Native
  • Ionic/Capacitor — نهج WebView مع إعادة استخدام 95% من كود الويب
  • npm — أكبر مدير حزم مع أكثر من 2 مليون مكتبة لـ JS
  • Expo — طبقة فوق React Native لتطوير متسارع بدون إعداد بناء أصلي

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا