اذهب إلى المحتوى

البحث في الموقع

المحتوى عن 'arrow'.

  • ابحث بالكلمات المفتاحية

    أضف وسومًا وافصل بينها بفواصل ","
  • ابحث باسم الكاتب

نوع المحتوى


التصنيفات

  • الإدارة والقيادة
  • التخطيط وسير العمل
  • التمويل
  • فريق العمل
  • دراسة حالات
  • التعامل مع العملاء
  • التعهيد الخارجي
  • السلوك التنظيمي في المؤسسات
  • عالم الأعمال
  • التجارة والتجارة الإلكترونية
  • نصائح وإرشادات
  • مقالات ريادة أعمال عامة

التصنيفات

  • مقالات برمجة عامة
  • مقالات برمجة متقدمة
  • PHP
    • Laravel
    • ووردبريس
  • جافاسكربت
    • لغة TypeScript
    • Node.js
    • React
    • Vue.js
    • Angular
    • jQuery
    • Cordova
  • HTML
  • CSS
    • Sass
    • إطار عمل Bootstrap
  • SQL
  • لغة C#‎
    • ‎.NET
    • منصة Xamarin
  • لغة C++‎
  • لغة C
  • بايثون
    • Flask
    • Django
  • لغة روبي
    • إطار العمل Ruby on Rails
  • لغة Go
  • لغة جافا
  • لغة Kotlin
  • لغة Rust
  • برمجة أندرويد
  • لغة R
  • الذكاء الاصطناعي
  • صناعة الألعاب
  • سير العمل
    • Git
  • الأنظمة والأنظمة المدمجة

التصنيفات

  • تصميم تجربة المستخدم UX
  • تصميم واجهة المستخدم UI
  • الرسوميات
    • إنكسكيب
    • أدوبي إليستريتور
  • التصميم الجرافيكي
    • أدوبي فوتوشوب
    • أدوبي إن ديزاين
    • جيمب GIMP
    • كريتا Krita
  • التصميم ثلاثي الأبعاد
    • 3Ds Max
    • Blender
  • نصائح وإرشادات
  • مقالات تصميم عامة

التصنيفات

  • مقالات DevOps عامة
  • خوادم
    • الويب HTTP
    • البريد الإلكتروني
    • قواعد البيانات
    • DNS
    • Samba
  • الحوسبة السحابية
    • Docker
  • إدارة الإعدادات والنشر
    • Chef
    • Puppet
    • Ansible
  • لينكس
    • ريدهات (Red Hat)
  • خواديم ويندوز
  • FreeBSD
  • حماية
    • الجدران النارية
    • VPN
    • SSH
  • شبكات
    • سيسكو (Cisco)

التصنيفات

  • التسويق بالأداء
    • أدوات تحليل الزوار
  • تهيئة محركات البحث SEO
  • الشبكات الاجتماعية
  • التسويق بالبريد الالكتروني
  • التسويق الضمني
  • استسراع النمو
  • المبيعات
  • تجارب ونصائح
  • مبادئ علم التسويق

التصنيفات

  • مقالات عمل حر عامة
  • إدارة مالية
  • الإنتاجية
  • تجارب
  • مشاريع جانبية
  • التعامل مع العملاء
  • الحفاظ على الصحة
  • التسويق الذاتي
  • العمل الحر المهني
    • العمل بالترجمة
    • العمل كمساعد افتراضي
    • العمل بكتابة المحتوى

التصنيفات

  • الإنتاجية وسير العمل
    • مايكروسوفت أوفيس
    • ليبر أوفيس
    • جوجل درايف
    • شيربوينت
    • Evernote
    • Trello
  • تطبيقات الويب
    • ووردبريس
    • ماجنتو
    • بريستاشوب
    • أوبن كارت
    • دروبال
  • الترجمة بمساعدة الحاسوب
    • omegaT
    • memoQ
    • Trados
    • Memsource
  • برامج تخطيط موارد المؤسسات ERP
    • تطبيقات أودو odoo
  • أنظمة تشغيل الحواسيب والهواتف
    • ويندوز
    • لينكس
  • مقالات عامة

التصنيفات

  • آخر التحديثات

أسئلة وأجوبة

  • الأقسام
    • أسئلة البرمجة
    • أسئلة ريادة الأعمال
    • أسئلة العمل الحر
    • أسئلة التسويق والمبيعات
    • أسئلة التصميم
    • أسئلة DevOps
    • أسئلة البرامج والتطبيقات

التصنيفات

  • كتب ريادة الأعمال
  • كتب العمل الحر
  • كتب تسويق ومبيعات
  • كتب برمجة
  • كتب تصميم
  • كتب DevOps

ابحث في

ابحث عن


تاريخ الإنشاء

  • بداية

    نهاية


آخر تحديث

  • بداية

    نهاية


رشح النتائج حسب

تاريخ الانضمام

  • بداية

    نهاية


المجموعة


النبذة الشخصية

تم العثور على 2 نتائج

  1. تعرّفنا في مقال سابق على ميزات جديدة في الإصدار ES6 من جافاسكريبت. سنتابع في هذا المقال الحديث عن الميزات الأكثر استخداما من هذا الإصدار وذلك بتناول الإضافات الجديدة التالية: المعاملات المبدئية التفكيك Destructuring. المعاملات المبدئية تتيح هذه الخاصيّة تحديد معاملات افتراضية عند تعريف الدوال. نأخذ مثالاً لتوضيح الفائدة التي نجنيها من هذا الأمر, سنفترض أننا نريد كتابة دالة تطبع اسم عضو في فريق لعبة. إن كتبنا الدالة حسب الطريقة القديمة - قبل الإصدار ES6 - فستكون شبيهة بالتالي: function announcePlayer (firstName, lastName, teamName) { console.log(firstName + ' ' + lastName + ', ' + teamName) } announcePlayer('Stephen', 'Curry', 'Golden State Warriors') // Stephen Curry, Golden State Warriors يبدو الأمر مناسبا للوهلة الأولى؛ لكن ماذا لو أردنا الإعلان عن اسم لاعب لا ينتمي لأي فريق؟ ستكون نتيجة تنفيذ الدالة أعلاه كالتالي: announcePlayer('Zell', 'Liew') // Zell Liew, undefined طبعا undefined ليس اسم فريق. سيكون من المناسب الإشعار بأن اللاعب غير منتمٍ (Unaffiliated) لأي فريق عند عدم تمرير المعامل للدالة: announcePlayer('Zell', 'Liew', 'unaffiliated') // Zell Liew, unaffiliated يمكننا تحسين الشفرة بالتحقق من تمرير المعامل إلى المتغيّر teamName بدلاً من تمرير القيمة unaffiliated في كلّ مرة: function announcePlayer (firstName, lastName, teamName) { if (!teamName) { teamName = 'unaffiliated' } console.log(firstName + ' ' + lastName + ', ' + teamName) } announcePlayer('Zell', 'Liew') // Zell Liew, unaffiliated announcePlayer('Stephen', 'Curry', 'Golden State Warriors') // Stephen Curry, Golden State Warriors يمكن تقليل الأسطُر باستخدام العوامل Ternary operators المنطقية الثلاثية ?: function announcePlayer (firstName, lastName, teamName) { var team = teamName ? teamName : 'unaffiliated' console.log(firstName + ' ' + lastName + ', ' + team) } يمكن بالاعتماد على ميزة المعاملات المبدئية في ES6 إضافة علامة = أمام اسم المعامل عند تعريف الدالة وسيأخذ المعامل تلقائية القيمة المُحدَّدة عند عدم تمرير قيمة له أثناء استدعاء الدالة. يصبح مثالنا السابق عند كتابته حسب صيغة ES6 كالتالي: const announcePlayer = (firstName, lastName, teamName = 'unaffiliated') => { console.log(firstName + ' ' + lastName + ', ' + teamName) } announcePlayer('Zell', 'Liew') // Zell Liew, unaffiliated announcePlayer('Stephen', 'Curry', 'Golden State Warriors') // Stephen Curry, Golden State Warriors لاحظ أن اسم الفريق يصبح unaffiliated عند عدم تمرير المعامل الأخير إلى الدالة. أمر أخير. يمكنك استخدام القيمة المبدئية للمعامل بتمرير undefined يدويا إلى الدالة. تفيد هذه الطريقة إذا كان المعامل الذي تريد استخدام قيمته المبدئية ليس الأخير في معطيات الدالة: announcePlayer('Zell', 'Liew', undefined) // Zell Liew, unaffiliated التفكيك يعدّ التفكيك طريقة مناسبة لاستخراج قيم من المصفوفات Arrays والكائنات Objects. توجد فروق طفيفة بين تفكيك المصفوفات وتفكيك الكائنات. تفكيك الكائنات فلنفترض أن لدينا الكائن التالي: const Zell = { firstName: 'Zell', lastName: 'Liew' } ستحتاج - للحصول على الاسم الشخصي (firstName) والاسم العائلي (lastName) من Zell إلى إنشاء متغيّريْن وإسناد كل قيمة إل متغيّر: let firstName = Zell.firstName // Zell let lastName = Zell.lastName // Liew يتيح تفكيك الكائن إنشاء هذين المتغيّرين وإسنادهما بسطر واحد: let { firstName, lastName } = Zell console.log(firstName) // Zell console.log(lastName) // Liew مالذي يحدُث هنا؟ تطلُب من جافاسكريبت عند إضافة القوسين المعكوفين على النحو الذي رأيناه أثناء تعريف المتغيّرات تطلُب إنشاء المتغيرات المذكورة وإسناد Zell.firstName إلى firstName وZell.lastName إلى lastName. تترجم جافاسكريبت - الإصدار ES6 - الشفرة التالية: let { firstName, lastName } = Zell إلى: let firstName = Zell.firstName let lastName = Zell.lastName إن سبق استخدام اسم المتغيّر فلن يكون باستطاعتنا تعريفه من جديد؛ خصوصا عند استخدام let أو const. الشفرة التالية غير صحيحة: let name = 'Zell Liew' let course = { name: 'JS Fundamentals for Frontend Developers' // ... other properties } // تتسبّب التعليمة التالية في الخطأ Uncaught SyntaxError: Identifier 'name' has already been declared let { name } = course يمكن تفادي الخطأ في الحالات السابقة بإعادة تسمية المتغيّر أثناء تفكيك الكائن باستخدام النقطتين العموديّتين : على النحو التالي: let { name: courseName } = course console.log(courseName) // JS Fundamentals for Frontend Developers يترجم مفسّر الإصدار ES6 التعليمة عند استخدام النقطتين على النحو التالي: let courseName = course.name أمر أخير بخصوص تفكيك الكائنات. عند استخراج خاصيّة غير موجودة في الكائن فإن المتغيّر يأخذ القيمة undefined: let course = { name: 'JS Fundamentals for Frontend Developers' } let { package } = course console.log(package) // undefined هل تذكر المعاملات المبدئية؟ يمكنك استخدامها لاستخراج المتغيّرات كذلك. الصياغة مطابقة لتلك المستخدمة عند تعريف الدوال: let course = { name: 'JS Fundamentals for Frontend Developers' } let { package = 'full course' } = course console.log(package) // full course يمكنك كذلك إعادة تسمية المتغيّرات مع تحديد قيم مبدئية لها: let course = { name: 'JS Fundamentals for Frontend Developers' } let { package: packageName = 'full course' } = course console.log(packageName) // full course تفكيك المصفوفات يشبه تفكيك المصفوفات تفكيك الكائنات. تُستخدَم الأقواس المُربَّعة [] بدلا من {} لاستخراج متغيّرات من المصفوفة. المتغيّر الأول بين الأقواس يأخذ قيمة العنصُر الأول في المصفوفة والمتغيّر الثاني قيمة العنصر الثاني وهكذا. let [one, two] = [1, 2, 3, 4, 5] console.log(one) // 1 console.log(two) // 2 إن حدّدت متغيرات أكثر من عناصر المصفوفة فإن المتغيرات الزائدة تأخذ القيمة undefined: let [one, two, three] = [1, 2] console.log(one) // 1 console.log(two) // 2 console.log(three) // undefined في الغالب نستخرج العناصر التي نحتاجها من المصفوفة فقط. يمكن استخدام الكلمة المفتاحية rest على النحو التالي لاستقبال بقية المصفوفة: let scores = ['98', '95', '93', '90', '87', '85'] let [first, second, third, ...rest] = scores console.log(first) // 98 console.log(second) // 95 console.log(third) // 93 console.log(rest) // [90, 87, 85] سنخصّص جزءًا من هذا المقال للحديث عن العامل rest، ولكن قبل ذلك سنتحدّث عن ميزة خاصّة عند تفكيك المصفوفات وهي مبادلة المتغيّرات Swapping variables. فلنفترض أن لدينا متغيّريْن a وb: let a = 2 let b = 3 نريد مبادلة هذين المتغيّرين بحيث تكون قيمة a تساوي 3 وقيمة b تساوي 2. نحتاج - في الإصدار ES5 - إلى استخدام متغيّر ظرفي لإكمال المبادلة: let a = 2 let b = 3 let temp // المبادلة temp = a // temp = 2 a = b // a = 3 b = temp // b = 2 فلنر الآن كيفية المبادلة في ES6 بتفكيك المصفوفات: let a = 2 let b = 3; // نحتاج لنقطة فاصلة هنا لأن السطر الموالي يبدأ بقوس معكوف مربَّع // المبادلة باستخدام ميزة تفكيك المصفوفات [a, b] = [b, a] console.log(a) // 3 console.log(b) // 2 تفكيك المصفوفات والكائنات في الدوال أروع ما في التفكيك إمكانيةُ استخدامه في أي مكان تريده. حتى إن بإمكانك تفكيك المصفوفات والكائنات في الدوال. فلنفترض أن لدينا دالة تأخذ مصفوفة من النتائج وتعيد كائنا بالنتائج الثلاث الأعلى. تشبه الدالة التالية ما فعلناه عند تفكيك المصفوفات السابقة: ملحوظة: ليس ضروريا استخدام الدوال السهمية للاستفادة من ميزات ES6 الأخرى. function topThree (scores) { let [first, second, third] = scores return { first: first, second: second, third: third } } توجد طريقة بديلة لكتابة الدالة أعلاه وهي تفكيك المصفوفة أثناء تعريف الدالة. سنقلّل عدد الأسطُر في هذه الحالة كما أننا نعرف أن المعطى المُمرَّر لنا مصفوفة. function topThree ([first, second, third]) { return { first: first, second: second, third: third } } سنرى الآن تفصيلا صغيرا. بما أننا نستطيع الجمع بين المعاملات المبدئية والتفكيك أثناء تعريف الدوال.. فما هي نتيجة الشفرة التالية: function sayMyName ({ firstName = 'Zell', lastName = 'Liew' } = {}) { console.log(firstName + ' ' + lastName) } الأمر معقَّد قليل إذ أننا جمعنا ميزات عدّة في آن. أولا؛ نرى أن الدالة تأخذ معطى واحدا، وهو كائن اختياري تكون قميته {} عند عدم تحديد قيمة. ثانيًّا، نحاول تفكيك الكائن واستخراج المتغيرين firstName وlastName منه واستخدامهما إن وُجدا. أخيرا؛ عندما لا يُعيَّن المتغيران firstName وlastName في الكائن المُمرَّر فإننا نحدّد قيمتيهما بـ Zell وLiew على التوالي. تعطي الدالة النتائج التالية: sayMyName() // Zell Liew sayMyName({firstName: 'Zell'}) // Zell Liew sayMyName({firstName: 'Vincy', lastName: 'Zhang'}) // Vincy Zhang سنتعرّف في مقال لاحق على ميزات أخرى جديدة في الإصدار ES6. ترجمة - بتصرّف - للمقال Introduction to commonly used ES6 features لصاحبه Zell.
  2. سنتعلم في هذا الدرس طريقة رسم أسهم في حلقة دائرية الشكل عن طريق برنامج إنكسكيب. في البداية سنزيل الإطار الموجود في الصفحة عن طريق: File > Document properties ثم من النافذة المنبثقة نزيل علامة الصح بجانب عبارة: Show page border. نرسم دائرة مع الضغط على Ctrl أثناء الرسم لتكون متساوية الأبعاد. نقلل شفافية الشكل Opacity إلى المنتصف أو قريبا منها. نزيل التعبئة من لوحة التعبئة والحدود Fill and stoke من تبويب التعبئة Fill. نضيف حدودا للدائرة من تبويب رسم الحدود Stroke paint من نفس اللوحة، ونتأكد من عدم تفعيل خيار تكبير الحدود عند تكبير الشكل من أعلى الشريط؛ حتى لا يتغير حجم الحد عند تكبير الدائرة. نتجه لتبوب سمة الحد Stroke style ونجعل قيمة العرض Width = 70. سنعدل في عرض وطول الدائرة من الشريط العلوي بعد التأكد من اختيار علامة القفل الموجودة بين الطول والعرض، للمحافظة على النسبة بين الطول والعرض، ونضع قيمته 400. لتحويل الحد إلى مسار سنختار من قائمة المسار Path الخيار Stroke to path. سنرسم مربعا مع الضغط على Ctrl أثناء الرسم للمحافظة على تساوي الطول والعرض للمربع. سنزيل حدود المربع ونلونه باللون الأحمر، ونقلل شفافية للمنتصف. من الشريط العلوي سنجعل عرضه 200 مع التأكد من تفعيل رمز القفل. نحدد المربع ثم نحدد الحلقة بالضغط على Shift لتحديدهما معا، ثم من لوحة المحاذاة والاصطفاف Align and distribute نحاذي الشكلين من جهة الحافة اليسرى، ثم من نفس اللوحة نحاذيهما من جهة الحافة العلوية. سنختار المربع ثم من قائمة Path نختار Object to path لتحويل الشكل لمسار. نكرر المربع عن طريق تحديده ومن لوحة المفاتيح نضغط Ctrl+D، ثم بعد ذلك نحدد المربع المكرر ثم نحدد الحلقة، ومن نافذة المحاذاة نحاذيهما من جهة الحافة السفلى. نختار الحلقة مع المربع الأول الذي الأصل، ثم من قائمة Path نختار Intersection. نكرر المربع المتبقي مجددا، ونزيحه جانبا ثم نقوم بتدويره بالضغط عليه مجددا لتظهر أسهم التدوير مع الضغط على Ctrl أثناء التدوير إلى أن يعطينا شكل المعين. نختار أداة التحرير Node tool ونحذف العقدة السفلية باختيارها ثم من لوحة المفاتيح نضغط زر الحذف. نفعل خيار الالتقاط والكبس Enable snapping من الشريط العلوي، ومنه نفعل Snap cusp nodes ثم نسحب أذرع العقدة Node handles إلى العقدة نفسها وسنلاحظ أن العقدة ستلتقط الذراع، نفعل ذلك مع العقدتين السفليتين ثم نلغي خيار الالتقاط حتى نكمل الرسم بحرية. وبهذا نحصل على شكل المثلث. ملاحظة: يمكن اختصار هذه الخطوات عن طريق أداة النجمة والمضلع Stars and polygons باختيار المضلع وتحديد عدد الزوايا 3 . قم بتدوير المثلث باتجاه عقارب الساعة مع الضغط على Ctrl أثناء التدوير أو اضغط على خيار التدوير من الشريط العلوي. كرر الجزء الأسود المتبقي من الحلقة ثم ارسم في حافته العلوية مستطيلا يتقاطع مع جزء من الحافة. ثم اختر الجزء المكرر من الحلقة مع المستطيل، واختر الأمر Intersection من قائمة Path. اختر المثلث مع المستطيل الصغير في حافة الحلقة الذي حصلنا عليه توًا، ومن لوحة المحاذاة والاصطفاف نحاذيهما أفقيا ثم نختار من نفس اللوحة خيار محاذاة الحافة اليسرى بالحافة اليمنى لتلتصق حافة المثلث اليسرى بحافة المستطيل الصغير اليمنى. نصغر المثلث من السهم الأيمن المتوسط مع الضغط على Ctrl أثناء التصغير. نحذف المستطيل الصغير في حافة السهم لعدم حاجتنا له بعد الآن، ثم نختار المثلث مع جزء الحلقة المتبقي ومن قائمة Path نختار Union لنجعلهما شكلا واحدا. نعيد تفعيل خيارات الالتقاط والكبس التي فعلناها سابقا ونفعل معها خيار Snap other point، ثم نضغط على السهم المستدير مرة أخرى لتظهر أسهم التدوير وليظهر لنا مركز الشكل على شكل علامة +. نسحب المركز من وسط الشكل إلى زاوية المربع العلوية اليمنى، ولكوننا فعلنا خيار الالتقاط والكبس فستلتقطه زاوية المربع. نكرر السهم ثم نقوم بتدويره مع الضغط على Ctrl أثناء التدوير، بحيث يكون طرف السهم المكرر عند قاعدة المثلث. نكرر السهم مجددا لمرتين وندورها بحيث تتكون عندنا حلقة الأسهم، ونحذف المربع لعدم حاجتنا له. نكرر السهم الأول ونحدد السهم الذي يليه باتجاه عقارب الساعة ثم من قائمة Path نختار Difference. نفعل الشيء نفسه مع بقية الأسهم بحيث نكرر كل سهم في الحلقة ونحدده مع الذي يليه ونختار الأمر Difference. نحدد جميع الأسهم ثم نعيد الشفافية 100 كما كانت، ثم من الشريط السفلي نلون الأسهم باللون المناسب، وبهذا نكون أنهينا حلقة الأسهم الدائرية، ولمزيد من التفاصيل نتابع بقية الخطوات. من تبويب التعبئة سنختار التدرج الخطي Linear gradient ثم من نفس التبويب نختار زر التحرير Edit في أسفل اللوحة. سيظهر لنا خطا مستقيما في طرفيه عقدتين عبارة عن لوني التدرج، نختار العقدة اليمنى ومن لوحة التعبئة عند الحرف A نحرك المؤشر إلى أقصى اليمين لنزيل شفافية اللون. نعطيه لونا قاتما ونحرك عقدة اللون القاتم عند طرف انطلاق السهم ونحرك عقدة اللون الفاتح عند رأس السهم، ونكرر الخطوات نفسها لبقية الأسهم. لإضافة فكرة أخرى للأسهم، سنقوم بتكرارها وتلوينها جميعها باللون الأسود وجعل شفافيتها بنصف القيمة أو مقاربة لها. نكرر السهم الأول، ثم من لوحة المفاتيح نضغط على Ctrl+0 ثم نضغط على Shift ونحدد السهم الذي يليه باتجاه عقارب الساعة، ثم من قائمة Path نختار Difference. نتجه للسهم الثاني ثم نكرره ونفعل به ما فعلناه بالأول، ثم بتحديده هو والسهم الذي يليه نتبع الأمر Difference ونفعل ذلك مع السهم الثالث والرابع. نعيد شفافية الأسهم 100 وبذلك نصل للنتيجة النهائية: الدرس مستفاد من مقطع فيديو بعنوان: Inkscape Tutorial: Arrow Circle لصاحبه Nick Saporito.
×
×
  • أضف...