-
المساهمات
1588 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
1
إجابات الأسئلة
-
إجابة Khaled Osama3 سؤال في Front end road map كانت الإجابة المقبولة
بما أنك بدأت تعلم البرمجة مع C++ و HTML/CSS، الخطوة التالية تعتمد على رغبتك في التطور في مجال تطوير الويب فالخطوة المنطقيه هي تعلم JavaScript فهي لغة البرمجة التي تجعل صفحات الويب تفاعلية. ستتعلم من خلالها إضافة الحركة والتفاعل إلى المواقع وبعد تعلم الجافاسكريبت فانت هكذا لديك اساسيه قويه في البرمجه والفرونت اند والخطوه التي بعدها يجب ان تتعلم Libraries مثل React.js أو Vue.js أو Angular. هذه المكتبات تساعدك في بناء واجهات تفاعلية بسهولة وسرعة وتجعل الكود الخاص بك منظم وقابل للتطوير والتغيير اذا تتطلب الامر
ويوجد امر مهم جدا يجب الا نتجاهله Responsive Design باستخدام CSS Frameworks مثل Bootstrap أو Tailwind CSS لجعل المواقع تعمل جيدا على الهواتف وأجهزة الكمبيوتر.
ولكن بالنسبه لسوالك عن الفرونت إند وحده أم الفول ستاك؟:
هناك مطورين متخصصين فقط في الفرونت إند (Front-End Developers)، وهم يركزون فقط على تصميم الواجهات.
ولكن، في بعض الأحيان، يفضل أصحاب الأعمال توظيف شخص يمتلك مهارات فول ستاك (Full-Stack) (ولكن المرتب يكون اكبر طبعا). أي يكون لديه القدرة على تطوير الفرونت إند بالإضافة إلى الباك إند (Back-End)، وهو الجزء الذي يدير البيانات على الخوادم.
ولكن اذا كنت تفضل الفرونت اند فقط ستجد وظائف كثيره لها ولكن اذا كنت مهتم بتعلم الفول ستاك لزياده فرصك يمكنك أن تتعلم لغات الباك إند مثل Node.js أو Python (Django أو Flask)، وأيضاً التعامل مع قواعد البيانات مثل MongoDB أو MySQL.
في النهاية، يعتمد قرارك على ما إذا كنت تفضل التخصص في الفرونت إند أو إذا كنت ترغب في توسيع مهاراتك إلى الفول ستاك. لكن البدء بفرونت إند هو خطوة جيدة ومطلوبة في السوق.
-
إجابة Khaled Osama3 سؤال في مشكلة فى تشغيل أوامر العمليات الحسابية لكود آلة حاسبة بسيط كانت الإجابة المقبولة
و عليكم السلام
كان يوجد مشكلة فى زر الجمع و زر المساوة يجب ان تضع فى الbutton_click احتمال لل + و استخدامها:
def button_click(root, text): if text == "=": try: result = str(eval(entry_field.get())) entry_field.delete(0, tk.END) entry_field.insert(0, result) except: entry_field.delete(0, tk.END) entry_field.insert(0, "Error") elif text == "+": # add this condition entry_field.insert(tk.END, "+") elif text == "CLR": entry_field.delete(0, tk.END) elif text == "BCKSP": entry_field.delete(len(entry_field.get()) - 1, tk.END) else: entry_field.insert(tk.END, text)
و لست بحاجة الى هذا الكود فهو غير مستخدم:
if Calculator == "addition": entry_field.insert(0, number1 + int(numbertwo))
و يجب التعديل فى كود ال button 8, 9 و ذلك باستخدام button_click بدلا من button_add and button_equal:
button_8 = tk.Button(root, text="+", bg="blue", fg="white", font="Arial, 12", command=lambda: buttonadd()) button_8.grid(row=1, column=2, columnspan=4, padx=10, pady=10) button_9 = tk.Button(root, text="=", bg="blue", fg="white", font="Arial, 12", command= lambda: buttonequal()) button_9.grid(row=1, column=3, columnspan=4, padx=10, pady=10)
و يمكنك ايضا الاستغناء عن جميع ال imports و جعلها بهذة الطريقة:
from tkinter import * import tkinter as tk from tkinter.tix import * و هذا كل الكود بعد التعديلات. ولاحظ أن الكود مختلف فى التنسيق و ذلك لستخدامى black formatter يمكن البحث عنه و هو ينسق كود البايثون بشكل افضل.
from tkinter import * import tkinter as tk from tkinter.tix import * class Calculator: def __init__(self, master): self.master = master def button_click(entry, value): entry_field.insert(tk.END, value) def clear(entry): entry_field.delete(0, tk.END) def backspace(entry): current_text = entry.get() entry_field.delete(len(current_text) - 1) def buttonadd(): global number1 global operation number1 = int(entry_field.get()) operation = "addition" entry_field.delete(0, END) def buttonequal(): number2 = int(entry_field.get()) entry_field.delete(0, END) if operation == "addition": result = number1 + number2 entry_field.insert(0, result) def button_click(root, text): if text == "=": try: result = str(eval(entry_field.get())) entry_field.delete(0, tk.END) entry_field.insert(0, result) except: entry_field.delete(0, tk.END) entry_field.insert(0, "Error") elif text == "+": entry_field.insert(tk.END, "+") elif text == "CLR": entry_field.delete(0, tk.END) elif text == "BCKSP": entry_field.delete(len(entry_field.get()) - 1, tk.END) else: entry_field.insert(tk.END, text) # إنشاء نافذة التطبيق الرئيسية root = Tk() root.geometry("1000x1000") root.title("برنامج تحويل التقويم الياباني") root.configure(background="light green") root.columnconfigure((0, 1, 2, 3, 4), weight=1) # إنشاء أداة بالون للتلميحات tool_tip = Balloon(root) # إنشاء تسميات الإدخال label_1 = tk.Label(root, text="近現代", bg="green", fg="white", font=("Mincho", 12)) label_1.grid(row=0, column=0, columnspan=4, padx=10, pady=10) # إنشاء حقل الإدخال entry_field = tk.Entry(root, width=30, justify="right", font=("Arial", 16)) entry_field.grid(row=1, column=0, columnspan=4, padx=10, pady=10) # إنشاء الأزرار button_1 = tk.Button( root, text="明治", bg="green", fg="white", font="Mincho, 12", command=lambda: button_click(root, "1868"), ) button_1.grid(row=2, column=0, columnspan=4, padx=10, pady=10) button_2 = tk.Button( root, text="大正", bg="green", fg="white", font="Mincho, 12", command=lambda: button_click(root, "1912"), ) button_2.grid(row=3, column=0, columnspan=4, padx=10, pady=10) button_3 = tk.Button( root, text="昭和", bg="green", fg="white", font="Mincho, 12", command=lambda: button_click(root, "1926"), ) button_3.grid(row=4, column=0, columnspan=4, padx=10, pady=10) button_4 = tk.Button( root, text="平成", bg="green", fg="white", font="Mincho, 12", command=lambda: button_click(root, "1989"), ) button_4.grid(row=5, column=0, columnspan=4, padx=10, pady=10) button_5 = tk.Button( root, text="令和", bg="green", fg="white", font="Mincho, 12", command=lambda: button_click(root, "2019"), ) button_5.grid(row=6, column=0, columnspan=4, padx=10, pady=10) button_6 = tk.Button( root, text="CLR", bg="blue", fg="white", font="Arial, 12", command=lambda: entry_field.delete(0, tk.END), ) button_6.grid(row=1, column=4, columnspan=4, padx=5, pady=5) button_7 = tk.Button( root, text="BCKSP←", bg="blue", fg="white", font="Arial, 12", command=lambda: entry_field.delete(len(entry_field.get()) - 1, tk.END), ) button_7.grid(row=1, column=5, columnspan=4, padx=5, pady=5) button_8 = tk.Button( root, text="+", bg="blue", fg="white", font="Arial, 12", command=lambda: button_click(root, "+"), ) button_8.grid(row=1, column=2, columnspan=4, padx=10, pady=10) button_9 = tk.Button( root, text="=", bg="blue", fg="white", font="Arial, 12", command=lambda: button_click(root, "="), ) button_9.grid(row=1, column=3, columnspan=4, padx=10, pady=10) button_10 = tk.Button( root, text="1", bg="cyan", fg="white", font="Arial, 12", command=lambda: button_click(root, "1"), ) button_10.grid(row=4, column=1, columnspan=4, padx=5, pady=5) button_11 = tk.Button( root, text="2", bg="cyan", fg="white", font="Arial, 12", command=lambda: button_click(root, "2"), ) button_11.grid(row=4, column=2, columnspan=4, padx=5, pady=5) button_12 = tk.Button( root, text="3", bg="cyan", fg="white", font="Arial, 12", command=lambda: button_click(root, "3"), ) button_12.grid(row=4, column=3, columnspan=4, padx=5, pady=5) button_13 = tk.Button( root, text="4", bg="cyan", fg="white", font="Arial, 12", command=lambda: button_click(root, "4"), ) button_13.grid(row=4, column=4, columnspan=4, padx=5, pady=5) button_14 = tk.Button( root, text="5", bg="cyan", fg="white", font="Arial, 12", command=lambda: button_click(root, "5"), ) button_14.grid(row=4, column=5, columnspan=4, padx=5, pady=5) button_15 = tk.Button( root, text="6", bg="cyan", fg="white", font="Arial, 12", command=lambda: button_click(root, "6"), ) button_15.grid(row=5, column=1, columnspan=4, padx=5, pady=5) button_16 = tk.Button( root, text="7", bg="cyan", fg="white", font="Arial, 12", command=lambda: button_click(root, "7"), ) button_16.grid(row=5, column=2, columnspan=4, padx=5, pady=5) button_17 = tk.Button( root, text="8", bg="cyan", fg="white", font="Arial, 12", command=lambda: button_click(root, "8"), ) button_17.grid(row=5, column=3, columnspan=4, padx=5, pady=5) button_18 = tk.Button( root, text="9", bg="cyan", fg="white", font="Arial, 12", command=lambda: button_click(root, "9"), ) button_18.grid(row=5, column=4, columnspan=4, padx=5, pady=5) button_19 = tk.Button( root, text="0", bg="cyan", fg="white", font="Arial, 12", command=lambda: button_click(root, "0"), ) button_19.grid(row=5, column=5, columnspan=4, padx=5, pady=5) # تعيين التلميحات للأزرار tool_tip.bind_widget(button_1, balloonmsg="أقصي رقم للادخال هو 44") tool_tip.bind_widget(button_2, balloonmsg="أقصي رقم للادخال هو 14") tool_tip.bind_widget(button_3, balloonmsg="أقصي رقم للادخال هو 63") tool_tip.bind_widget(button_4, balloonmsg="أقصي رقم للادخال هو 29") tool_tip.bind_widget(button_5, balloonmsg="لا يوجد رقم أقصي حتي تاريخه") # تشغيل حلقة التطبيق الرئيسية root.mainloop() بالتوفيق.
-
إجابة Khaled Osama3 سؤال في ما هي أنسب وأشهر تقنية للـ Caching للغة PHP ? كانت الإجابة المقبولة
أشهر تقنيات الـ Caching المستخدمة مع PHP بتعتمد على نوع البيانات التي تريد تخزينها وسيناريو الاستخدام. ويوجد أكثر من تقنية مشهورة شغالين بيها مع PHP:
OPcache هذا مثل محسن للـ opcode مدمج مع PHP. بيشتغل إنه يخزن النسخ المترجمة من ملفات PHP في الرام (الذاكرة)، وهذا يقلل من وقت تنفيذ الأكواد لأن مفيش احتياج إن الملفات تترجم كل مرة تتطلب فيها. وهذا بيحسن الأداء بشكل كبير.
فعال جدا في تحسين أداء تطبيقات PHP، وسهل في الإعداد والاستخدام، وبينفع مع معظم المواقع والتطبيقات.
Memcached هذا نظام تخزين مؤقت موزع في الرام (الذاكرة)، وبيتستخدم لتخزين البيانات المؤقتة وتخفيف الحمل على قاعدة البيانات. ممكن تخزن به جلسات المستخدم، نتائج الاستعلامات، أو أي بيانات اخري تريد تخزينها بشكل مؤقت.
سريع جدا، ويدعم التوزيع على أكتر من سيرفر، ومستخدم في التطبيقات الكبيرة التي عليها ضغط.
Redis هذا مثل قاعدة بيانات في الرام (in-memory data store) بتشتغل كمخزن بيانات، وCache، ووسيط رسائل. بيدعم أنواع كثيره من البيانات مثل السلاسل والقوائم والمجموعات.
بيدعم ميزات متقدمة مثل استمرارية البيانات (persistence)، والنسخ الاحتياطي، وبيتعامل مع البيانات المعقدة. Redis يعمل في التطبيقات التي محتاجة أداء عالي.
Varnish هذا مسرع HTTP بيشتغل كطبقة بين المستخدم والسيرفر، وبيتخزن به محتوى HTTP مؤقتا في الرام لتحسين سرعة تحميل الصفحات.
فعال في تسريع تحميل الصفحات، وبيقلل الحمل على السيرفر، وبيستخدم بشكل شائع في المواقع اللي عليها حركة كبيرة.
الخلاصه إذا كنت محتاج تحسين أداء تنفيذ PHP نفسه، إذا OPcache هو الأنسب.
إذا كنت محتاج تخزين مؤقت للبيانات بشكل عام (مثل نتائج الاستعلامات أو جلسات المستخدم)، اذا Memcached أو Redis هما الأنسب.
إذا كنت محتاج تسريع تحميل صفحات الويب من خلال تخزين مؤقت لمحتوى HTTP، اذا Varnish سيكون خيار مناسب.
-
إجابة Khaled Osama3 سؤال في مشكلة في الصلاحيات failed to open stream ! كانت الإجابة المقبولة
بما أن المسار صحيح ويعطيك الملفات الموجودة فيه، المشكلة قد تكون في صلاحيات الوصول أو في استخدام أسماء المجلدات داخل الكود. للتحقق أكثر، تحقق من الأذونات للمجلدات الفرعية والمجلد الذي يحتوي على السكريبت
chmod -R 777 /home/1.****.com/public_html/images2/ وايضان يجب ان تتأكد من أن أسماء المجلدات في الكود تتطابق بالضبط مع الأسماء الموجودة في النظام، بما في ذلك الأحرف الكبيرة والصغيرة. في بعض الأحيان، قد تكون المشكلة ناتجة عن حرف مختلف في الاسم.
بعد هذه التأكيدات اذا استمرت المشكله جرب ان تضف بعض التحقق من الأخطاء في الكود الخاص بك للحصول على مزيد من التفاصيل حول الخطأ لكي نستطيع ايجاد اين المشكله بالظبط
$path = 'images2/2024/imk.jpg'; if (!file_exists(dirname($path))) { die('Directory does not exist: ' . dirname($path)); } if (!is_writable(dirname($path))) { die('Directory is not writable: ' . dirname($path)); } if (file_put_contents($path, $data) === false) { die('Failed to write to file: ' . $path); } جرب هذه الخطوات وإذا استمرت المشكلة، قدم لي الرسائل الجديدة التي تحصل عليها
-
إجابة Khaled Osama3 سؤال في كيفية الخروج من بيئة الافتراضية في Python (venv) وتغيير المسار في VS Code كانت الإجابة المقبولة
يبدو انك بتشتغل في virtual environment في بايثون، وده شائع جدًا ومفيد علشان تدير الاعتماديات والمكتبات لمشاريع بايثون المختلفة بشكل منفصل عن باقي النظام. البيئة الافتراضية اللي بتشتغل فيها مفعلة دلوقتي، وده السبب في ظهور (venv) قبل المسار في سطر الأوامر.
كيفية الخروج من البيئة الافتراضية
عشان تخرج من البيئة الافتراضية في نافذة الأوامر، يمكنك استخدام الأمر:
deactivate لما تعمل الأمر ده، هتلاحظ أن (venv) اختفت من قدام المسار، وده يعني أنك خرجت من البيئة الافتراضية.
تغيير المسار جوا سطر الأوامر
لو حابب تغير المسار جوا نافذة الأوامر، ممكن تستخدم الأمر cd (Change Directory). مثال لتغيير المسار:
cd C:\Users\L\Documents أكد أنك بتكتب المسار الصحيح اللي عايز تروح له.
استخدام VS Code بكفاءة
VS Code ده محرر نصوص قوي ممكن تحوله لبيئة تطوير متكاملة (IDE) لو استخدمت الإضافات والإعدادات. اهم النصايح علشان تستخدم VS Code بكفاءة أكتر:
ثبت الإضافات المناسبة: ممكن تثبت إضافات زي Python (من Microsoft) علشان تحسن دعم بايثون. الإضافة دي بتوفر دعم للتصحيح، التلميحات أثناء الكتابة، ومميزات تانية كتير.
هيأ البيئة الافتراضية: ممكن تهيء VS Code يتعرف لوحده على البيئة الافتراضية لو ضفت مسار البيئة الافتراضية لإعدادات المشروع.
استخدم التصحيح (Debugging): VS Code عنده مميزات تصحيح قوية. ممكن تستخدم شباك "Run and Debug" علشان تصحح سكريبتات بايثون.
الانتقال لـ PyCharm
PyCharm ده IDE متكامل خصوصي لـ Python بيوفر ميزات متقدمة زي تحليل الكود، دعم إطارات العمل للويب زي Django و Flask، وأدوات لتطوير قواعد البيانات. الانتقال له ممكن يكون مفيد لو بتدور على بيئة أكتر تكامل وتخصص في Python.
-
إجابة Khaled Osama3 سؤال في نوع الكائن المعاد من الدالة enumarate كانت الإجابة المقبولة
نعم، الكائن المعاد من دالة enumerate() في بايثون هو عبارة عن قائمة من الصفوف (tuples).
دالة enumerate() تقوم بإرجاع كائن مُعَرِّف (iterator) يُنتج صفوف، حيث تتكون كل صف من عنصرين:
1. الفهرس (index) للعنصر الحالي، ويبدأ من 0 افتراضيًا (يمكن تغيير القيمة الابتدائية إذا تم تمرير قيمة ثانية للدالة).
2. العنصر (item) نفسه من التسلسل (sequence) الذي تم تمريره إلى دالة enumerate().
لذلك، إذا كان لديك قائمة مثل:
my_list = ['apple', 'banana', 'cherry'] فإن دالة enumerate(my_list) ستنتج الصفوف التالية:
(0, 'apple') (1, 'banana') (2, 'cherry') يمكنك بعد ذلك استخدام حلقة للتعامل مع هذه الصفوف، مثلًا:
for idx, item in enumerate(my_list): print(f'Index: {idx}, Item: {item}') وستكون المخرجات:
Index: 0, Item: apple Index: 1, Item: banana Index: 2, Item: cherry لذلك، نعم، الكائن المعاد من دالة enumerate() هو قائمة من الصفوف، حيث تحتوي كل صف على الفهرس والعنصر الموافق له في التسلسل الأصلي.
الدالة enumerate() في بايثون.
-
إجابة Khaled Osama3 سؤال في هل يجب البدء بتعلم Node.js مباشرة بعد إنهاء مسار React؟ كانت الإجابة المقبولة
وعليكم السلام ورحمة الله،
من وجهة نظري أنه من الأفضل أن تتعمق أكثر في رياكت قبل الانتقال لـ Node.js.
وذلك لعدة أسباب:
رياكت مكون أساسي يجب فهمه جيدا قبل الانتقال لمراحل أعمق. ستستطيع بناء تطبيقات واقعية برياكت وتطبيق ما تعلمته عمليا. سيكون لديك خلفية أفضل عن جانب الويب قبل دخول الجانب الخادم. ستتمكن من الاستفادة مما تعلمته لاحقا عند دراسة Node.js قد تحتاج تعزيز بعض المفاهيم بالتطبيق قبل الانتقال. يجب التمكن من React ومجالاتها المتقدمة (مثل إدارة الحالة مع Redux أو MobX، Context API، Hooks، وغيرها) سيعزز قدراتك في تطوير الواجهات الأمامية.
نصيحتي بالتركيز أكثر على رياكت الآن عبر إنشاء مشاريع حقيقية، ثم بعدها البدء في Node.js. سيكون التعلم أكثر استفادة وترابطا.
-
إجابة Khaled Osama3 سؤال في مشكلة في تغير package name لتطبيق كانت الإجابة المقبولة
لا يمكنك تغيير ال package name حتى ولو كان معك ال key Store الخاص بالتطبيق ، واذا اردت تغييرها عليك برفع التطبيق مرة اخرى كأنه تطبيق جديد ، حلك ان تقوم بعمل تحديث للتطبيق بنفس اسم ال package name او اما ان تقوم باعادة رفع التطبيق من جديد ونعم عندها سيكون تحميلات 0 وتعليقات 0 وتقيم 0 ...الخ وليس هناك نفع لل key store فى هذه الحالة ، حتى شركة facebook او تويتر لا تستطيع تغيير ال package name.
-
إجابة Khaled Osama3 سؤال في تحويل الموقع من عربي للإنجليزي؟ كانت الإجابة المقبولة
تحتاجين لتعلم التوطين (localization).
التوطين هو عملية تكييف المنتج أو التطبيق ليكون ملائمًا لسوق محدد أو لغة معينة أو ثقافة معينة. يتضمن التوطين تعديل النصوص والرسومات والتصميمات والتوجيهات البرمجية بحيث تتوافق مع الاحتياجات والتفضيلات الثقافية واللغوية للمستخدمين في السوق المستهدف.
يشمل التوطين تغيير النصوص، وتعديل التنسيق والتصميم ليناسب الثقافة واللغة المستهدفة، وتحويل العملات والتوقيت إلى النظام المستخدم في البلد المستهدف، وتوفير ترجمة للواجهة والمحتوى، بالإضافة إلى تعديل الأشكال والرموز الخاصة بتوافقها مع الثقافة المستهدفة.
على سبيل المثال، إذا كنت تطور تطبيقًا للهواتف الذكية وترغب في إطلاقه في الأسواق العربية، فسيكون عليك توطين التطبيق ليدعم اللغة العربية، وقد يتطلب ذلك ترجمة النصوص إلى العربية، وضبط التصميم ليدعم الكتابة من اليمين إلى اليسار، وتغيير بعض الرموز والصور لتتناسب مع الثقافة العربية، وغيرها من التعديلات المتعلقة باللغة والثقافة.
ويمكنكى استخدام لغة ال JavaScript للقيام بهذه المهمة.
وهذا مثال بسيط للتوطين بين اربعة لغات مختلفة، اللغة العربية والإنجليزية والفرنسية والإسبانية.
function translateText(text, targetLanguage) { // قاموس الترجمة const translations = { "مرحبا": { "en": "Hello", "fr": "Bonjour", "es": "Hola" }, "كيف حالك؟": { "en": "How are you?", "fr": "Comment ça va?", "es": "¿Cómo estás?" }, }; // التحقق مما إذا كان النص موجودًا في قاموس الترجمة if (translations[text]) { // إذا كان النص موجود، فتحقق من توفر الترحمة للغة المستهدفة if (translations[text][targetLanguage]) { // إذا وجدت الترجمة، قم بإرجاعها return translations[text][targetLanguage]; } else { // إذا لم تجد الترجمة، قم بإرجاع النص الأصلي return text; } } else { // إذا لم يكن النص موجودًا في قاموس الترجمة، قم بإرجاع النص الأصلي return text; } }; const originalText = "مرحبا"; const targetLanguage = "en"; // اللغة المستهدفة هنا هي الإنجليزية const translatedText = translateText(originalText, targetLanguage); console.log(translatedText); // Output: Hello
-
إجابة Khaled Osama3 سؤال في مشكلة في كود php كانت الإجابة المقبولة
يرجي ملاحظه ان الكود المرسل لا يحتوي علي إغلاق تعليمة if بقافلة } يجب ان تضع علامه } بعد هذا السطر mysqli_stmt_close($stmt);
وقبل هذا السطر ?>.
-
إجابة Khaled Osama3 سؤال في انا مبتدء في تطوير المواقع اريد عند فتح الصفحه يتم تنفيذ شئ معين كانت الإجابة المقبولة
يمكنك استخدام الدالة window.onload أو استخدام الحدث DOMContentLoaded الذي ينتظر تحميل DOM الصفحة بالكامل قبل تنفيذ الكود.
إليك مثال بسيط على كيفية استخدام window.onload:
window.onload = function() { // كود JavaScript الذي تريد تنفيذه عند تحميل الصفحة console.log('تم تحميل الصفحة بنجاح!'); // يمكنك استدعاء أي دالة هنا myFunction(); }; function myFunction() { // منطق الدالة الذي تريد تنفيذه console.log('تم تنفيذ دالة myFunction.'); } وهذا مثال آخر باستخدام DOMContentLoaded:
document.addEventListener('DOMContentLoaded', function() { // كود JavaScript الذي تريد تنفيذه عندما يكون DOM جاهزًا console.log('DOM جاهز الآن للتفاعل معه!'); // يمكنك استدعاء أي دالة هنا myFunction(); }); function myFunction() { // منطق الدالة الذي تريد تنفيذه console.log('تم تنفيذ دالة myFunction.'); } الفرق بين الاثنين هو أن window.onload ينتظر تحميل كل شيء بما في ذلك الصور وأوراق الأنماط، بينما DOMContentLoaded ينتظر فقط تحميل HTML وبناء DOM.
يمكنك اختيار الطريقة التي تناسبك أكثر حسب ما تريد أن تفعله الدالة عند تحميل الصفحة.
-
إجابة Khaled Osama3 سؤال في مشكلة في VSCode كانت الإجابة المقبولة
السبب في أن البرنامج يعطي دائما نفس النتيجة لأول كود هو أنه ينفذ دائما الكود الأول الموجود في الملف المصدري. لعرض نتائج مختلفة، يجب إضافة الكود الجديد وحفظ الملف ثم التنفيذ, يمكن أن تستخدم اختصارات لحفظ الكود، مثل Ctrl + S في Windows أو Cmd + S في macOS.
اما بالنسبه لملف test.exe هو ملف التنفيذي الناتج عن ترجمة المصدر test.c++. أما ملف json فربما يكون ملف إعدادات المشروع. هذا طبيعي في لغة سي++.
يمكنك قراءة المزيد عن دورة حياة برنامج سي++ من الترجمة إلى التنفيذ لفهم هذه الأمور بشكل أفضل.
لا تقلق كونك مبتدئًا. مع الممارسة ستتعود على هذه الأشياء.