JavaScript — لغة دبلوماسية: كيف تتفاهم مع Python وC++ وغيرها
\n\nلقد توقف عالم التطوير منذ فترة طويلة عن كونه "أحادي اللغة". لقد ولت الأيام التي كانت فيها المشاريع تُكتب حصريًا بلغة PHP أو Java. اليوم نعيش في عصر البرمجة متعددة اللغات، وJavaScript في هذا النظام البيئي تلعب دور الدبلوماسي الرئيسي. إنها تعمل مع أي شخص: من Python إلى C++، ومن Go إلى Rust. السؤال الوحيد هو كيف يتم تنظيم ذلك بالضبط.
\n\nدعنا نفهم كيفية دمج JavaScript مع اللغات الأخرى. بدون حشو، مع أمثلة كود حقيقية وسيناريوهات عملية. ستتعلم كيفية جعل الواجهة الأمامية والخلفية تعملان بتناغم، بدلاً من أن تتقاتلا مع بعضهما البعض.
\n\nلماذا دمج JavaScript مع اللغات الأخرى أساسًا؟
\n\nقد يبدو الأمر معقدًا بلا داعٍ؟ يوجد Node.js — اكتب كل شيء بلغة JS. لكن الواقع أكثر تعقيدًا. لكل لغة قدراتها الخارقة:
\n\n- \n
- Python — ملك التعلم الآلي وعلوم البيانات. JS عاجزة هنا. \n
- C++ — أقصى أداء للألعاب والرسومات. \n
- Java — موثوقية الحلول المؤسسية. \n
- Go — التزامن والسرعة في الخدمات المصغرة. \n
دمج JavaScript مع هذه اللغات يسمح بأخذ الأفضل من كل منها. تحصل على واجهة جميلة باستخدام React وتحليلات قوية باستخدام Python تحت الغطاء. يبدو وكأنه حلم؟ دعنا نحوله إلى حقيقة.
\n\nطرق دمج JavaScript مع Python
\n\n1. استدعاء Python من Node.js عبر child_process
\n\nأبسط وأكثر طريقة مباشرة — تشغيل سكريبت Python كعملية فرعية. هذا ليس أنيقًا، لكنه يعمل في كل مكان.
\n\n// app.js — Node.js يستدعي Python\nconst { exec } = require('child_process');\n\nfunction analyzeSentiment(text) {\n return new Promise((resolve, reject) => {\n exec(`python3 sentiment.py "${text}"`, (error, stdout, stderr) => {\n if (error) return reject(error);\n resolve(stdout.trim());\n });\n });\n}\n\n// الاستخدام\n(async () => {\n const result = await analyzeSentiment('JavaScript — أفضل لغة!');\n console.log(`النغمة: ${result}`);\n})();\n\n\nوهذا هو سكريبت Python نفسه:
\n\n# sentiment.py\nimport sys\nfrom textblob import TextBlob\n\ntext = sys.argv[1]\nblob = TextBlob(text)\nprint(blob.sentiment.polarity)\n\n\nالعيب: كل استدعاء هو عملية جديدة. للإنتاج، استخدم python-shell أو zerorpc.
2. الربط عبر REST API (Flask + Node.js)
\n\nنهج أكثر صحة — رفع خدمة مصغرة بلغة Python والتواصل معها عبر HTTP.
\n\n# server.py — Python Flask API\nfrom flask import Flask, request, jsonify\nimport joblib\n\napp = Flask(__name__)\nmodel = joblib.load('model.pkl')\n\n@app.route('/predict', methods=['POST'])\ndef predict():\n data = request.json\n prediction = model.predict([data['features']])\n return jsonify({'result': prediction.tolist()})\n\nif __name__ == '__main__':\n app.run(port=5000)\n\n\nعلى جانب JavaScript:
\n\n// client.js — عميل Node.js\nasync function getPrediction(features) {\n const response = await fetch('http://localhost:5000/predict', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ features })\n });\n return response.json();\n}\n\n// مثال على الاستدعاء\ngetPrediction([1.2, 3.4, 5.6]).then(console.log);\n\n\nيُستخدم هذا النهج في 90% من حالات دمج JavaScript مع Python. العمارة القائمة على الخدمات المصغرة هي المسيطرة.
\n\n3. Python داخل المتصفح: Brython وPyodide
\n\nهل تريد تشغيل Python مباشرة على الواجهة الأمامية؟ استخدم Pyodide — منفذ CPython عبر WebAssembly.
\n\n<!DOCTYPE html>\n<html>\n<head>\n <script src="https://cdn.jsdelivr.