مقالات

2: الوظائف


  • 2.1: مقدمة في الوظائف
    إن تطويرنا لمفهوم الوظيفة هو مفهوم حديث ، ولكنه سريع للغاية ، لا سيما في ضوء حقيقة أن تعريف اليوم استغرق أكثر من 300 عام للوصول إلى حالته الحالية. نبدأ بتعريف العلاقة.
  • 2.2: الرسم البياني للدالة
    يقدم ديكارت نظام الإحداثيات الخاص به ، وهو طريقة لتمثيل النقاط في المستوى عبر أزواج من الأرقام الحقيقية. في الواقع ، سميت الطائرة الديكارتية في العصر الحديث بهذا الاسم تكريما لرينيه ديكارت ، الذي يسميه البعض "أبو الرياضيات الحديثة". يتكون نظام الإحداثيات الديكارتية من زوج من المحاور ، يتم رسمها عادةً بزوايا قائمة لبعضها البعض في المستوى ، أحدهما أفقي (يُشار إليه بـ x) والآخر عمودي (يسمى y).
  • 2.3: تفسير الرسم البياني للدالة
    في القسم السابق ، بدأنا بدالة ثم رسمنا الرسم البياني للدالة المحددة. في هذا القسم ، سنبدأ بالرسم البياني للدالة ، ثم نجري عددًا من التفسيرات بناءً على الرسم البياني المعطى: تقييمات الدالة ، ومجال الدالة ونطاقها ، وحل المعادلات والمتباينات.
  • 2.4: حل المعادلات وعدم المساواة عن طريق الرسوم البيانية
    كان تركيزنا في الفصل على الوظائف وتفسير الرسوم البيانية الخاصة بهم. في هذا القسم ، نستمر في هذا المسار ونحول استكشافنا إلى حل المعادلات والمتباينات عن طريق التمثيل البياني. سيكون للمعادلات الشكل f (x) = g (x) ، وسيكون للمتباينات شكل f (x) g (x).
  • 2.5: التحولات العمودية
    في هذا القسم ندرس فن التحولات: المقاييس ، الانعكاسات ، والترجمات. سنقتصر انتباهنا على التحولات في الاتجاه الرأسي أو الاتجاه الصادي. هدفنا هو تطبيق تحويلات معينة على معادلة دالة ، ثم نسأل عن تأثيرها على الرسم البياني للدالة.
  • 2.6: التحولات الأفقية
    في القسم السابق ، قدمنا ​​مفهوم التحولات. قمنا بتغيير المعادلة الأساسية y = f (x) ، مثل y = af (x) ، y = ،f (x) ، y = f (x) - c ، أو y = f (x) + c ، ثم درس كيف أثرت هذه التغييرات على شكل الرسم البياني لـ y = f (x). في هذا القسم ، ركزنا بشكل صارم على التحولات التي يتم تطبيقها في الاتجاه الرأسي. في هذا القسم ، سوف ندرس التحويلات التي ستؤثر على شكل الرسم البياني في الاتجاه الأفقي.
  • 2.7: الفصل 2 تمارين مع الحلول

2: الوظائف

قد تعيد الوظيفة أيضًا قيمة (مثل الإخراج). على سبيل المثال ، الدالة max () (اختصار لـ أقصى) يعيد أكبر حجج من بين كل وسيطاته ، والتي يجب أن تكون أرقامًا.
الاسم قيمة الإرجاع تعني القيمة التي تعيدها الدالة. على سبيل المثال في الحد الأقصى (42 ، 17) نقول إن "الحد الأقصى للدالة أعاد القيمة 42".

للدالة max صديق يتصرف بشكل مشابه: الدالة min ترجع ال الحد الأدنى (الأصغر) من حججها.

يمكن دمج الوظائف لإنشاء تعبيرات أكثر تعقيدًا.

إجابتك (أدخل رقمًا):

لست مقيدًا باستخدام الوظائف المحددة مسبقًا في Python. ستتعلم في القليل من الدروس كيفية تحديد وظائف جديدة!


الوظائف في C ++

في هذه المقالة ، سنتعرف على الوظائف في C ++.

الوظيفة هي جزء من الكود يؤدي مهمة معينة. الوظيفة في C ++ هي مجموعة من العبارات باسم يمكن استدعاؤها من أي مكان في البرنامج.

لإبقائك على اطلاع بأحدث اتجاهات التكنولوجيا ، انضم إلى TechVidvan على Telegram

لماذا الوظائف في C ++؟

دعونا نناقش إجابات لأسئلة مثل لماذا نحتاج إلى وظائف أو لماذا الوظائف مهمة للغاية. هذا بسبب الأسباب التالية:

  • مقروئية: الوظائف تجلب نمطية لبرامجنا. يجعلون البرامج أكثر قابلية للقراءة.
  • يتحكم: تتيح الوظائف التحكم السهل في التدفق بين أجزاء مختلفة من البرنامج.
  • وفرة: تعمل الوظائف على تقليل التكرار في برامجنا. إذا أردنا تنفيذ مهمة في أماكن متعددة في البرنامج ، فيمكننا استدعاء وظيفة بدلاً من كتابة نفس الرمز بشكل متكرر.
  • إعادة الاستخدام: تزيد الوظائف من قابلية إعادة استخدام الكود.
  • التجريد: وظائف تدعم التجريد. يمكننا استخدام الوظائف مباشرة من مكتبة C ++ دون معرفة كيفية عمل الوظيفة.
  • معالجة الأخطاء: يصبح من السهل العثور على الأخطاء وتصحيحها.
  • وقت: يمكننا توفير الكثير من الوقت باستخدام الوظائف.

أنواع الوظائف في C ++

1. وظائف المكتبة القياسية: الوظائف المحددة مسبقًا في ملفات الرأس C ++.

2. وظائف محددة من قبل المستخدم: الوظائف التي يحددها المستخدم.

في هذه المقالة ، سيكون تركيزنا على الوظائف التي يحددها المستخدم. سوف نتعلم كيفية تحديد الوظائف واستخدامها في برنامجنا.

تحديد وظيفة في C ++

يمكننا تحديد وظيفة باتباع بناء الجملة الوارد أدناه.

وبالتالي ، تتكون الوظيفة من الأجزاء التالية:

  • نوع_الإرجاع: تحدد نوع البيانات للنتيجة التي سترجعها الوظيفة.
  • اسم وظيفة: إنه الاسم الذي يطلق على الوظيفة.
  • حدود: إنها قائمة المعلمات التي تتلقاها الوظيفة. هنا ، نحدد عدد المعلمات ونوعها وترتيبها. قد تحتوي الوظيفة أو لا تحتوي على معلمات.
    يشتمل توقيع الوظيفة على function_name والمعلمات.
  • الجسم: داخل الأقواس المتعرجة ، نكتب عبارات لتحديد مهمة الوظيفة.

مثال على تعريف دالة في C ++

  • نوع الإرجاع باطل مما يعني أن الوظيفة لا تُرجع أي قيمة
  • يتم عرض اسم الوظيفة
  • ليس لديها أي معلمة

استدعاء دالة في C ++

نحتاج إلى استدعاء أو استدعاء دالة أينما نريد استخدامها.

بناء الجملة لاستدعاء وظيفة بدون نوع إرجاع (باطل):

بناء الجملة لاستدعاء وظيفة بنوع إرجاع:

هنا ، "المتغير" هو المتغير الذي سيخزن القيمة التي يتم إرجاعها. و الوسيطة 1 ، الوسيطة 2 ، ... هي المعلمات التي نمررها للدالة.

مثال على تعريف واستدعاء دالة في C ++

لاحظ أن برنامج C ++ يبدأ دائمًا باستدعاء الوظيفة الرئيسية ، بغض النظر عن ترتيب تعريف الوظائف. في الواقع ، main هي الوظيفة الوحيدة التي يتم استدعاؤها تلقائيًا ، ولا يتم تشغيل رمز الوظائف الأخرى إلا إذا تم استدعاؤها بشكل مباشر أو غير مباشر من main.

معلمات الوظيفة في C ++

تسمى المعلمات التي نمررها إلى دالة أثناء استدعاء الوظيفة الوسيطات أو المعلمات الفعلية. في المثال أعلاه ، n1 و n2 معلمات فعلية.

المتغيرات المحلية في تعريف الوظيفة تسمى المعلمات الرسمية. في المثال أعلاه ، a و b معلمات رسمية.

عندما نستدعي دالة ، يتم تعيين المعلمات الفعلية للمعلمات الرسمية.

إعلان الوظيفة في C ++

يمكننا أيضًا إعطاء تعريف الوظيفة بعد استدعاء الوظيفة. ولكن ، في هذه الحالة ، من الضروري التصريح عن الوظيفة مسبقًا. ويسمى أيضًا النموذج الأولي للوظيفة.

مثال على إعلان الوظيفة في C ++

لاحظ أننا نحصل على نفس الناتج في كلا الاتجاهين.

تمرير الحجج في C ++

أثناء استدعاء دالة ، يمكننا تمرير الوسيطات بثلاث طرق.

1. نداء من حيث القيمة

في الاستدعاء حسب القيمة (أو التمرير بالقيمة) ، يتم تمرير قيم الوسائط التي يتم نسخها إلى المعلمات الرسمية. يتم تخزين المعلمات الفعلية والمعلمات الرسمية في مواقع مختلفة من الذاكرة. ومن ثم ، فإن التعديلات التي تم إجراؤها على المعلمات الرسمية داخل الوظيفة لا تنعكس في المعلمات الفعلية خارجها.

2. دعوة بالإشارة

في الاستدعاء عن طريق المرجع (أو التمرير حسب المرجع) ، يتم نسخ مراجع الوسائط إلى المعلمات الرسمية. باستخدام هذه المراجع ، يتم الوصول إلى المعلمات الفعلية من داخل الوظيفة. وبالتالي ، تنعكس التعديلات التي يتم إجراؤها داخل الوظيفة في المعلمات الفعلية خارجها.

3. دعوة المؤشر

في الاتصال بالمؤشر (أو المرور بالمؤشر) ، نقوم بتمرير عناوين المتغيرات. وبالتالي ، تشير كل من المعلمات الفعلية والرسمية إلى نفس الموقع. وبالتالي ، تنعكس التعديلات التي تم إجراؤها على المعلمات الرسمية داخل الوظيفة في المعلمات الفعلية خارجها.

دعونا نفهم مع الأمثلة:

مثال على المكالمة حسب القيمة في C ++

#include & ltiostream & gt باستخدام تعديل مساحة الاسم std void (int a) int main () x = 3

لاحظ أنه في هذه الحالة ، تظل قيمة x دون تغيير.

مثال على الاتصال بالإشارة في C ++

#include & ltiostream & gt باستخدام تعديل مساحة الاسم std void (int & ampa) int main () x = 5

الآن ، تغيرت قيمة x.

مثال على استدعاء بواسطة مؤشر في C ++

في هذه الحالة أيضًا تتغير قيمة x.

ملخص

لقد غطينا الوظائف في هذه المقالة. تعلمنا كيفية تعريف وظيفة والإعلان عنها في C ++. يجب أن تكون قد لاحظت أن كل وظيفة لها نوع إرجاع. بعد ذلك ، تعلمنا كيفية استدعاء دالة. لاحظنا أيضًا أهمية الوظيفة الرئيسية في C ++. أخيرًا ، تعلمنا طرق الاستدعاء حسب القيمة ، والاستدعاء بالمرجع ، والاستدعاء بالمؤشر لتمرير الوسائط إلى دالة. قدمنا ​​أمثلة مناسبة لفهم أفضل للمفاهيم.


الانتقال من 1.x إلى 2.x

يصف هذا القسم كيفية ترحيل الإصدار 1.x الحالي الخاص بك وظائف التحمل إلى الإصدار 2.x للاستفادة من الميزات الجديدة.

قم بترقية الامتداد

قم بتثبيت أحدث إصدار 2.x من ملحق روابط الوظائف المتينة في مشروعك.

JavaScript و Python و PowerShell

تتوفر الوظائف المتينة 2.x في الإصدار 2.x من حزمة ملحقات Azure Functions.

يتطلب دعم Python في الوظائف الدائمة وظائف دائمة 2.x.

لتحديث إصدار حزمة الامتداد في مشروعك ، افتح host.json وقم بتحديث قسم حزمة الامتدادات لاستخدام الإصدار 2.x ([2. * ، 3.0.0)).

إذا كان Visual Studio Code لا يعرض القوالب الصحيحة بعد تغيير إصدار حزمة الامتداد ، فأعد تحميل النافذة عن طريق تشغيل ملف المطور: إعادة تحميل النافذة الأمر (Ctrl + R في نظامي التشغيل Windows و Linux ، و Command + R على نظام macOS).

قم بتحديث مشروع .NET الخاص بك لاستخدام أحدث إصدار من ملحق روابط الوظائف الدائمة.

قم بتحديث التعليمات البرمجية الخاصة بك

تقدم الوظائف المتينة 2.x العديد من التغييرات الفاصلة. الوظائف الدائمة 1. تطبيقات 1.x غير متوافقة مع الوظائف المتينة 2.x بدون تغييرات في التعليمات البرمجية. يسرد هذا القسم بعض التغييرات التي يجب عليك إجراؤها عند ترقية وظائف الإصدار 1.x إلى 2.x.

مخطط Host.json

يستخدم 2.x الوظائف المتينة مخطط host.json جديد. تشمل التغييرات الرئيسية من 1.x ما يلي:

  • & quotstorageProvider & quot (والقسم الفرعي & quotazureStorage & quot) للتهيئة الخاصة بالتخزين.
  • & quottracing & quot لتكوين التتبع والتسجيل.
  • & quotnotifications & quot (والقسم الفرعي & quoteventGrid & quot) لتكوين إعلام شبكة الحدث.

يتغير اسم فريق المهام الافتراضي

في الإصدار 1.x ، إذا لم يتم تحديد اسم مركز المهام في host.json ، فسيتم تعيينه افتراضيًا إلى & quotDurableFunctionsHub & quot. في الإصدار 2.x ، يتم الآن اشتقاق اسم مركز المهام الافتراضي من اسم تطبيق الوظيفة. لهذا السبب ، إذا لم تحدد اسمًا لمركز المهام عند الترقية إلى 2.x ، فسيتم تشغيل التعليمات البرمجية الخاصة بك مع مركز مهام جديد ، ولن يكون هناك تطبيق يقوم بمعالجة كل التنظيمات أثناء الطيران. للتغلب على هذا ، يمكنك إما تعيين اسم مركز المهام الخاص بك بشكل صريح إلى الإصدار الافتراضي v1.x لـ & quotDurableFunctionsHub & quot ، أو يمكنك اتباع إرشادات نشر وقت التعطل الصفري للحصول على تفاصيل حول كيفية التعامل مع التغييرات الفاصلة للتنظيمات أثناء الطيران.

تغييرات الواجهة العامة (.NET فقط)

في الإصدار 1.x ، تم إنشاء ملفات سياق الكلام الكائنات التي تدعمها Durable Functions لها فئات أساسية مجردة مخصصة للاستخدام في اختبار الوحدة. كجزء من Durable 2.x الوظائف ، يتم استبدال هذه الفئات الأساسية المجردة بواجهات.

يمثل الجدول التالي التغييرات الرئيسية:

1.x 2.x
DurableOrchestrationClientBase قابل للتحقيقأورشيستراتيون العميل أو IDurableClient
DurableOrchestrationContextBase أو DurableOrchestrationContextBase قابل للتحقيق
DurableActivityContext أو DurableActivityContextBase IDABLEActivityContext
OrchestrationClientAttribute DurableClientAttribute

في حالة احتواء فئة أساسية مجردة على طرق افتراضية ، فقد تم استبدال هذه الأساليب الافتراضية بطرق الامتداد المحددة في DurableContextExtensions.

تغييرات function.json (JavaScript و C # Script)

في الوظائف المتينة 1.x ، يستخدم ارتباط عميل التزامن نوعًا من عميل التزامن. الإصدار 2.x يستخدم دائمًا عميل بدلاً من ذلك.

رفع تغييرات الحدث

في Durable Functions 1.x ، أدى استدعاء API حدث lift وتحديد مثيل غير موجود إلى فشل صامت. بدءًا من 2.x ، يؤدي رفع حدث إلى تزامن غير موجود إلى استثناء.


ماذا تعرف عن فيتامين ك -2

فيتامين ك هو فيتامين أساسي يدعم تخثر الدم وصحة العظام. يحدث في شكلين ، K-1 و K-2.

فيتامين K-1 هو الشكل الأساسي ، ويأتي بشكل أساسي من الخضار الورقية الخضراء. يوجد فيتامين ك -2 في البروتينات الحيوانية والأطعمة المخمرة. تنتج البكتيريا الموجودة في الأمعاء البشرية أيضًا كميات صغيرة من K-2.

في هذه المقالة ، نناقش فيتامين K-2 ووظائفه وكيف يختلف عن K-1. نصف أيضًا المصادر الغذائية ، الفوائد الصحية ، المدخول اليومي الموصى به ، أعراض النقص ، والمكملات.

مخلل الملفوف هو مصدر غذائي جيد لفيتامين K-2.

يشير فيتامين ك إلى عائلة من الفيتامينات التي تذوب في الدهون والتي يحتاجها الجسم لإنتاج بروتين يسمى البروثرومبين ، والذي يعزز تخثر الدم وينظم عملية التمثيل الغذائي للعظام.

يأتي الفيتامين في شكلين رئيسيين:

  • فيتامين ك -1، أو فيلوكينون ، موجود بشكل طبيعي في الخضروات ذات الأوراق الخضراء الداكنة وهو المصدر الغذائي الرئيسي لفيتامين ك.
  • فيتامين ك -2، أو ميناكينون ، موجود بكميات صغيرة في لحوم الأعضاء والأطعمة المخمرة. تنتج بكتيريا الأمعاء أيضًا فيتامين ك -2.

يحتاج الجسم إلى كلا النوعين من فيتامين K لإنتاج البروثرومبين ، وهو بروتين يلعب دورًا مهمًا في تخثر الدم ، وأيض العظام ، وصحة القلب. يساعد فيتامين K أيضًا في تسهيل إنتاج الطاقة في الميتوكوندريا بالخلايا.

فيتامين K-1 له دور أساسي في تخثر الدم. قد يكون لـ K-2 مجموعة متنوعة من الوظائف في الجسم.

في دراسة طويلة الأمد شملت 36629 مشاركًا ، لاحظ الباحثون وجود ارتباط

بين تناول كميات كبيرة من فيتامين K-2 وتقليل خطر الإصابة بأمراض الشرايين الطرفية (PAD) ، خاصة عند الأشخاص الذين يعانون من ارتفاع ضغط الدم. ومع ذلك ، خلص المؤلفون إلى أن K-1 ليس له أي تأثير على خطر الإصابة باعتلال الشرايين المحيطية.

يحتوي فيتامين ك على خصائص مضادة للأكسدة. يحمي الأغشية الخلوية من التلف الناتج عن الجذور الحرة الزائدة ، في عملية تعرف باسم الأكسدة. يمكن لأدوية تسييل الدم ، مثل الوارفارين ، أن تقلل من إمكانات فيتامين ك المضادة للأكسدة

تحتوي الفيتامينات K-1 و K-2 على تركيبات كيميائية مختلفة. كلا النوعين لهما سلسلة جانبية phytyl ، لكن K-2 له أيضًا سلاسل جانبية isoprenoid.

يحتوي K-2 على عدة أنواع فرعية ، تسمى menaquinones (MKs) ، والتي قام العلماء بترقيمها من MK-4 إلى MK-13 ، بناءً على طول سلاسلها الجانبية.

K-1 هو الشكل الأساسي للفيتامين ، وهو موجود بشكل أساسي في الخضار الورقية الخضراء. ومع ذلك ، يواجه الجسم صعوبة في امتصاص فيتامين ك -1 من النباتات.

وفقًا لمراجعة عام 2019 ، تشير الأبحاث إلى أن الجسم يمتص 10 أضعاف فيتامين K-2 ، في شكل MK-7 ، من فيتامين K-1.

فيتامين K قابل للذوبان في الدهون ، لذا فإن تناول الدهون الغذائية ، مثل الزبدة أو الزيوت النباتية ، قد يعزز امتصاص الجسم لفيتامين K-1 من النباتات.

يمكن للبكتيريا الموجودة في القناة الهضمية أن تصنع فيتامين ك -1 في فيتامين ك -2. أيضًا ، تحتوي الأطعمة المخمرة واللحوم ومنتجات الألبان على كميات متواضعة من فيتامين ك -2.

يخزن الجسم الفيتامينات K-1 و K-2 بشكل مختلف. يتراكم K-1 في الكبد والقلب والبنكرياس. يحدث K-2 بتركيزات عالية في الدماغ والكلى.

العديد من الأطعمة غنية بفيتامين K-1 ، وفيتامين K-2 أقل شيوعًا. يمكن للبكتيريا الموجودة في القناة الهضمية تحويل بعض K-1 إلى K-2.

تعتبر الأطعمة المخمرة مصدرًا جيدًا لفيتامين K-2.

أيضًا ، نظرًا لأنها قابلة للذوبان في الدهون ، تحتوي اللحوم العضوية ومنتجات الألبان عالية الدسم على كميات كبيرة إلى حد ما من فيتامين K-2. على العكس من ذلك ، فإن اللحوم الخالية من الدهون ، مثل الدواجن ، ليست مصادر جيدة لـ K-2.

تشمل المصادر الغذائية لفيتامين K-1 ما يلي:

  • الخضراوات ذات الأوراق الخضراء الداكنة ، مثل السبانخ واللفت والكرنب
  • خس
  • فجل
  • بروكلي
  • جزر
  • الزيوت النباتية
  • العنب

تشمل المصادر الغذائية لفيتامين K-2 ما يلي:

  • ناتو ، طبق ياباني تقليدي من فول الصويا المخمر
  • ملفوف مخلل
  • منتجات الألبان ، وخاصة الجبن الصلب
  • الكبد ولحوم الأعضاء الأخرى
  • لحم
  • لحم خنزير
  • صفار البيض
  • دجاج
  • الأسماك الدهنية مثل السلمون

بالإضافة إلى دوره الحاسم في تخثر الدم والتئام الجروح ، يحتوي فيتامين ك -2 على عدد من الفوائد الصحية الأخرى. نناقش بعض هذه أدناه.

صحة القلب

قد يقلل فيتامين ك -2 من مخاطر تلف القلب والأوعية الدموية ويحسن صحة القلب بشكل عام.

وفقًا لمقالة مراجعة عام 2015 ، ينشط K-2 بروتينًا يمنع تكوّن رواسب الكالسيوم في جدران الأوعية الدموية. استشهد المؤلف بالنتائج التي تشير إلى أن اتباع نظام غذائي غني بفيتامين K2 الطبيعي قد يقلل من خطر الإصابة بأمراض القلب التاجية.

صحة العظم

يعزز فيتامين ك -2 كثافة المعادن في العظام الصحية عن طريق الكربوكسيل أوستيوكالسين ، وهو بروتين يربط الكالسيوم بالعظام.

حققت دراسة أجريت عام 2019 في آثار تناول مكملات MK-4 على 29 أنثى بعد انقطاع الطمث ممن عانين من كسور ضغط في الورك أو العمود الفقري.

وخلص الباحثون إلى أن تناول 5 ملليجرام من مكمل MK-4 يوميًا يقلل من مستويات أوستيوكالسين تحت الكربوكسيل إلى تلك "النموذجية لدى النساء الأصحاء في فترة ما قبل انقطاع الطمث".

فحصت دراسة أجريت عام 2017 من اليابان ما إذا كان فيتامين K-2 يعزز آثار الأدوية القياسية لهشاشة العظام لدى الإناث البالغات اللائي يبلغن من العمر 65 عامًا أو أكثر. وفقًا للنتائج ، لا يبدو أن فيتامين K-2 يعزز تأثيرات دواء هشاشة العظام.

القلق والاكتئاب

قد يؤدي ارتفاع مستويات السكر في الدم إلى زيادة خطر إصابة الشخص بالاكتئاب والقلق وضعف الإدراك.

حققت دراسة أجريت عام 2016 في آثار فيتامين ك -2 في الفئران المصابة بمتلازمة التمثيل الغذائي ، وارتفاع مستويات السكر في الدم وأعراض القلق والاكتئاب وعجز الذاكرة.

بعد 10 أسابيع ، أدى العلاج بفيتامين K إلى تسوية نسبة الجلوكوز في الدم وتقليل أعراض القلق والاكتئاب. ومع ذلك ، فإنه لم يحسن عجز الذاكرة لدى الفئران.

سرطان

يحتوي فيتامين ك -2 على خصائص مضادة للأكسدة قد تساعد في الحماية من السرطان. بالإضافة إلى ذلك ، تشير النتائج إلى أن K-2 قد يثبط العمليات الجينية التي تؤدي إلى نمو الورم.

وفقًا لدراسة أجريت عام 2018 ، فإن فيتامين K-2 الذي قام العلماء بتعديله باستخدام مركب حمض السياليك والكوليسترول المتقارن أدى إلى تثبيط نمو الورم في خلايا الفئران.

تشير دراسة أجريت عام 2019 إلى أن K-2 يقلل بشكل كبير من نشاط عامل نقص الأكسجة 1-alpha (HIF-1A) في خلايا سرطان الخلايا الكبدية. يعتبر HIF-1A هدفًا مهمًا للعلاج بالعقاقير السرطانية.


2: الوظائف

يتضمن Spark أيضًا المزيد من الوظائف المضمنة الأقل شيوعًا والتي لم يتم تعريفها هنا. لا يزال بإمكانك الوصول إليها (وجميع الوظائف المحددة هنا) باستخدام واجهة برمجة تطبيقات function.expr () واستدعائها من خلال سلسلة تعبير SQL. يمكنك العثور على قائمة كاملة من الوظائف في وثائق SQL API.

كمثال ، isnan هي وظيفة تم تعريفها هنا. يمكنك استخدام isnan (col ("myCol")) لاستدعاء وظيفة isnan. بهذه الطريقة يضمن مترجم لغة البرمجة وجود isnan وأنه بالشكل المناسب. يمكنك أيضًا استخدام دالة expr ("isnan (myCol)") لاستدعاء نفس الوظيفة. في هذه الحالة ، ستضمن Spark نفسها وجود isnan عند تحليل الاستعلام.

regr_count هو مثال لدالة مضمنة ولكن لم يتم تعريفها هنا ، لأنها أقل استخدامًا. لاستدعاءها ، استخدم expr ("regr_count (yCol، xCol)").

عادةً ما تحتوي واجهات برمجة التطبيقات لهذه الوظيفة على طرق مع توقيع العمود فقط لأنها لا تدعم العمود فحسب ، بل تدعم أيضًا أنواعًا أخرى مثل السلسلة الأصلية. المتغيرات الأخرى موجودة حاليًا لأسباب تاريخية.


وظائف على مستوى الكتلة

في الوضع المتشدد ، بدءًا من ES2015 ، يتم الآن تحديد نطاق الوظائف داخل الكتل لتلك الكتلة. قبل ES2015 ، تم حظر وظائف مستوى الكتلة في الوضع الصارم.

وظائف على مستوى الكتلة في رمز غير صارم

في التعليمات البرمجية غير الصارمة ، تتصرف إعلانات الوظائف داخل الكتل بشكل غريب. فمثلا:

يقول ES2015 أنه إذا كان يجب أن يكون DefineZero خطأً ، فلا يجب تحديد الصفر مطلقًا ، نظرًا لأن الكتلة لا يتم تنفيذها أبدًا. ومع ذلك ، فهو جزء جديد من المعيار. تاريخيا ، تم ترك هذا غير محدد ، وبعض المتصفحات ستحدد الصفر سواء تم تنفيذ الكتلة أم لا.

في الوضع المتشدد ، تتعامل جميع المتصفحات التي تدعم ES2015 بنفس الطريقة: لا يتم تعريف الصفر إلا إذا كان تعريف الصفر صحيحًا ، وفقط في نطاق if -block.

هناك طريقة أكثر أمانًا لتعريف الوظائف بشكل شرطي وهي تعيين تعبير دالة إلى متغير:


2: الوظائف

العمليات على الوظائف

في هذا القسم سوف نتعلم معنى جمع وطرح وضرب وقسمة دالتين. يعد تعلم هذه العمليات أمرًا مهمًا لأن أي دالة تقريبًا تواجهها هي مجموع أو فرق أو حاصل قسمة (أو أي مجموعة من هذه العمليات) لوظائف أبسط. سوف تتعلم أيضًا العثور على المجال ونطاق هذه الوظائف.

مجموع دالتين

افترض أن لدينا وظيفتين ، F(x) و ز(x). يمكننا تحديد مجموع هاتين الوظيفتين من خلال ،

أين x في مجال كليهما F و ز.

على سبيل المثال ، يمكننا إضافة الوظائف F(x) = x 2 & ناقص 1 و ز(x) = 2x 3 + 3 كـ ،

مجال (F + ز)(x) يتكون من الكل x- القيم التي تقع في مجال كليهما F و ز. في هذا المثال، F و g لهما مجال يتكون من جميع الأرقام الحقيقية ، لذلك (F + ز)(x) يحتوي أيضًا على مجال يتكون من جميع الأرقام الحقيقية.

الفرق بين وظيفتين

افترض أن لدينا وظيفتين ، F(x) و ز(x). يمكننا تحديد الفرق بين هاتين الوظيفتين من خلال ،

أين x في مجال كليهما F و ز.

مجال (F &ناقص ز)(x) يتكون من الكل x- القيم التي تقع في مجال كليهما F و ز. في هذه الحالة، F لديه المجال ، و ز لديه مجال جميع الأرقام الحقيقية ، لذلك (F &ناقص ز)(x) له مجال ، لأن هذه القيم x في مجال كليهما F و ز.

نتاج وظيفتين

افترض أن لدينا وظيفتين ، F(x) و ز(x). يمكننا تحديد ناتج هاتين الوظيفتين من خلال ،

أين x في مجال كليهما F و ز.

على سبيل المثال ، يمكننا ضرب الدوال F(x) = 1/ x و ز(x) = 2 كـ ،

مجال (F و middotز)(x) يتكون من الكل x- القيم التي تقع في مجال كليهما F و ز. في هذا المثال، F له مجال <x | x & ne 0> ، و g لديها مجال لجميع الأرقام الحقيقية ، لذلك (F و middot ز)(x) له مجال <x | x & ne 0> ، لأن هذه القيم x في مجال كليهما F و ز.

حاصل دالتين

افترض أن لدينا وظيفتين ، F(x) و ز(x). يمكننا تحديد حاصل هاتين الوظيفتين من خلال ،

أين x في مجال كليهما F و ز. من المهم أن تحددز(x) & ne 0 لأننا لا نستطيع القسمة على صفر. على سبيل المثال ، يمكننا تقسيم الوظائف F(x) = x & ناقص 7 و ز(x) = x + 5 كـ ،

مجال (F/ز) (x) يتكون من الكل x- القيم التي تقع في مجال كليهما F و ز، أين ز(x) & ني 0. كلاهما F و ز لديك مجال جميع الأرقام الحقيقية ، ولكن ز(x) = 0 عندما x = & ناقص 5. وهكذا ، فإن مجال (F/ز) (x) هو <x | x & ني & ناقص 5>.

في القسم التالي نتعلم كيف نأخذ تكوين وظيفتين.


المهام

تسمح الوظائف بهيكلة البرامج في أجزاء من التعليمات البرمجية لأداء المهام الفردية.

في لغة ++ C ، الوظيفة عبارة عن مجموعة من العبارات التي يطلق عليها اسم ، والتي يمكن استدعاؤها من نقطة ما في البرنامج. الصيغة الأكثر شيوعًا لتعريف الوظيفة هي:

اسم النوع (معلمة 1 ، معلمة 2 ،.) <عبارات>

أين:
- النوع هو نوع القيمة التي تُرجعها الوظيفة.
- الاسم هو المعرف الذي يمكن من خلاله استدعاء الوظيفة.
- المعلمات (حسب الحاجة): يتكون كل معلمة من نوع متبوعًا بمعرف ، مع فصل كل معلمة عن التي تليها بفاصلة. تبدو كل معلمة إلى حد كبير مثل إعلان متغير عادي (على سبيل المثال: int x) ، وهي في الواقع تعمل داخل الدالة كمتغير عادي محلي للدالة. الغرض من المعلمات هو السماح بتمرير الوسائط إلى الوظيفة من الموقع الذي يتم استدعاؤها منه.
- البيانات هي جسم الوظيفة. إنها كتلة من العبارات محاطة بأقواس معقوفة <> تحدد ما تفعله الوظيفة بالفعل.

دعنا نلقي نظرة على مثال:

ينقسم هذا البرنامج إلى وظيفتين: الإضافة والرئيسية. تذكر أنه بغض النظر عن الترتيب الذي تم تحديده به ، يبدأ برنامج C ++ دائمًا باستدعاء main. في الواقع ، main هي الوظيفة الوحيدة التي يتم استدعاؤها تلقائيًا ، ولا يتم تنفيذ الكود في أي وظيفة أخرى إلا إذا تم استدعاء وظيفتها من main (بشكل مباشر أو غير مباشر).

في المثال أعلاه ، يبدأ main بالتصريح عن المتغير z من النوع int ، وبعد ذلك مباشرة ، ينفذ استدعاء الوظيفة الأول: يستدعي إضافة. يتبع استدعاء دالة بنية مشابهة جدًا لإعلانها. في المثال أعلاه ، يمكن مقارنة الدعوة إلى الجمع بتعريفها قبل بضعة أسطر فقط:


تحتوي المعلمات في إعلان الوظيفة على مراسلات واضحة مع الوسائط التي تم تمريرها في استدعاء الوظيفة. يقوم الاستدعاء بتمرير قيمتين ، 5 و 3 ، للوظيفة التي تتوافق مع المعلمات a و b ، المعلنة لإضافة الوظيفة.

عند النقطة التي يتم عندها استدعاء الوظيفة من داخل main ، يتم تمرير عنصر التحكم لإضافة وظيفة: هنا ، يتم إيقاف تنفيذ main ، ولن يتم استئنافه إلا بمجرد انتهاء وظيفة الإضافة. في لحظة استدعاء الوظيفة ، يتم نسخ قيمة كل من الوسيطتين (5 و 3) إلى المتغيرات المحلية int a و int b داخل الدالة.

ثم ، بالإضافة إلى الداخل ، يتم الإعلان عن متغير محلي آخر (int r) ، وبواسطة التعبير r = a + b ، يتم تعيين نتيجة a زائد b إلى r والتي ، في هذه الحالة ، حيث a هي 5 و b هي 3 ، يعني أنه تم تعيين 8 لـ r.

البيان الختامي للوظيفة:

ينهي إضافة الوظيفة ، ويعيد عنصر التحكم مرة أخرى إلى النقطة التي تم فيها استدعاء الوظيفة في هذه الحالة: إلى الوظيفة الرئيسية. في هذه اللحظة بالتحديد ، يستأنف البرنامج مساره على العودة الرئيسية بالضبط في نفس النقطة التي انقطعت فيها الدعوة إلى الإضافة. ولكن بالإضافة إلى ذلك ، نظرًا لأن الإضافة لها نوع إرجاع ، يتم تقييم الاستدعاء على أنه يحتوي على قيمة ، وهذه القيمة هي القيمة المحددة في بيان الإرجاع الذي أنهى الإضافة: في هذه الحالة بالذات ، قيمة المتغير المحلي r ، والتي عند لحظة بيان العودة لها قيمة 8.


لذلك ، فإن استدعاء الإضافة هو تعبير بالقيمة التي تُرجعها الوظيفة ، وفي هذه الحالة ، يتم تعيين تلك القيمة ، 8 ، إلى z. يبدو الأمر كما لو أن استدعاء الوظيفة بالكامل (الإضافة (5،3)) قد تم استبداله بالقيمة التي يعيدها (أي ، 8).

ثم main تطبع هذه القيمة ببساطة عن طريق استدعاء:

يمكن استدعاء الوظيفة عدة مرات داخل البرنامج ، وحجتها بطبيعة الحال لا تقتصر على القيم الحرفية فقط:

على غرار وظيفة الإضافة في المثال السابق ، يعرّف هذا المثال دالة طرح ، تُرجع ببساطة الفرق بين معلمتين. هذه المرة ، يستدعي main هذه الوظيفة عدة مرات ، موضحًا المزيد من الطرق الممكنة التي يمكن من خلالها استدعاء الوظيفة.

دعونا نفحص كل من هذه الاستدعاءات ، مع الأخذ في الاعتبار أن كل استدعاء دالة هو في حد ذاته تعبير يتم تقييمه على أنه القيمة التي يتم إرجاعها. مرة أخرى ، يمكنك التفكير في الأمر كما لو تم استبدال استدعاء الوظيفة بالقيمة التي تم إرجاعها:

إذا استبدلنا استدعاء الوظيفة بالقيمة التي تعيدها (أي 5) ، فسنحصل على:

بنفس الإجراء ، يمكننا تفسير:

بما أن 5 هي القيمة التي يتم إرجاعها عن طريق الطرح (7،2).

الوسيطات التي تم تمريرها للطرح عبارة عن متغيرات وليست حرفية. هذا صحيح أيضًا ، ويعمل بشكل جيد. يتم استدعاء الوظيفة بالقيمتين x و y في لحظة الاستدعاء: 5 و 3 على التوالي ، مع إرجاع 2 كنتيجة.

النداء الرابع مشابه مرة أخرى:

الإضافة الوحيدة هي أن استدعاء الوظيفة الآن هو أيضًا معامل لعملية إضافة. مرة أخرى ، النتيجة هي نفسها كما لو تم استبدال استدعاء الوظيفة بالنتيجة: 6. لاحظ أنه بفضل الخاصية التبادلية للإضافات ، يمكن أيضًا كتابة ما سبق على النحو التالي:

مع نفس النتيجة بالضبط. لاحظ أيضًا أن الفاصلة المنقوطة لا تتبع بالضرورة استدعاء الوظيفة ، ولكن ، كما هو الحال دائمًا ، في نهاية الجملة بأكملها. مرة أخرى ، يمكن رؤية المنطق الكامن وراء ذلك بسهولة مرة أخرى عن طريق استبدال استدعاءات الوظائف بقيمتها التي تم إرجاعها:

وظائف بلا نوع. استخدام الفراغ

الصيغة الموضحة أعلاه للوظائف:

اكتب اسم (وسيطة 1 ، وسيطة 2.) <جمل>

يتطلب التصريح ليبدأ بنوع. هذا هو نوع القيمة التي تُرجعها الدالة. ولكن ماذا لو لم تكن الوظيفة بحاجة إلى إرجاع قيمة؟ في هذه الحالة ، يكون النوع الذي سيتم استخدامه باطلًا ، وهو نوع خاص يمثل غياب القيمة. على سبيل المثال ، قد لا تحتاج الوظيفة التي تطبع رسالة ببساطة إلى إرجاع أي قيمة:

يمكن أيضًا استخدام void في قائمة معلمات الوظيفة لتحديد أن الوظيفة لا تأخذ أي معاملات فعلية عند استدعائها. على سبيل المثال ، من الممكن أن يتم الإعلان عن printmessage على أنه:

في C ++ ، يمكن استخدام قائمة المعلمات الفارغة بدلاً من الفراغ بنفس المعنى ، ولكن استخدام الفراغ في قائمة الوسائط كان شائعًا بواسطة لغة C ، حيث يكون هذا مطلبًا.

الشيء الذي ليس اختياريًا بأي حال من الأحوال هو الأقواس التي تتبع اسم الوظيفة ، لا في إعلانها ولا عند تسميتها. وحتى عندما لا تأخذ الوظيفة أي معلمات ، يجب دائمًا إلحاق زوج فارغ من الأقواس باسم الوظيفة. انظر كيف تم استدعاء printmessage في مثال سابق:

الأقواس هي ما يميز الوظائف عن أنواع الإعلانات أو العبارات الأخرى. ما يلي لا يستدعي الوظيفة:

القيمة المرجعة لـ main

ربما لاحظت أن نوع إرجاع main هو int ، لكن معظم الأمثلة في هذا والفصول السابقة لم تُرجع في الواقع أي قيمة من main.

حسنًا ، هناك مشكلة: إذا كان تنفيذ النهايات الرئيسية بشكل طبيعي دون مواجهة تعليمة عودة ، يفترض المترجم أن الوظيفة تنتهي ببيان إرجاع ضمني:

لاحظ أن هذا ينطبق فقط على الوظيفة الرئيسية لأسباب تاريخية. يجب أن تنتهي جميع الوظائف الأخرى ذات نوع الإرجاع ببيان إرجاع مناسب يتضمن قيمة إرجاع ، حتى لو لم يتم استخدام هذا مطلقًا.

عندما يُرجع main صفر (سواء ضمنيًا أو صريحًا) ، تفسره البيئة على أنه انتهى البرنامج بنجاح. قد يتم إرجاع قيم أخرى بواسطة main ، وتتيح بعض البيئات الوصول إلى هذه القيمة للمتصل بطريقة ما ، على الرغم من أن هذا السلوك غير مطلوب ولا يمكن نقله بالضرورة بين الأنظمة الأساسية. قيم main التي يتم ضمان تفسيرها بنفس الطريقة على جميع الأنظمة الأساسية هي:

القيمةوصف
0 كان البرنامج ناجحًا
EXIT_SUCCESS كان البرنامج ناجحًا (كما هو مذكور أعلاه).
يتم تحديد هذه القيمة في header & ltcstdlib & gt.
EXIT_FAILURE فشل البرنامج.
يتم تحديد هذه القيمة في header & ltcstdlib & gt.

نظرًا لأن تعليمة return 0 الضمنية لـ main تعد استثناءً صعبًا ، فإن بعض المؤلفين يعتبرون أنه من الممارسات الجيدة كتابة العبارة بشكل صريح.

الحجج مرت بالقيمة والمرجع

في الوظائف التي رأيناها سابقًا ، تم تمرير الحجج دائمًا بالقيمة. هذا يعني أنه عند استدعاء دالة ، فإن ما يتم تمريره إلى الوظيفة هو قيم هذه الوسائط في لحظة الاستدعاء ، والتي يتم نسخها في المتغيرات التي تمثلها معلمات الوظيفة. على سبيل المثال ، خذ:

في هذه الحالة ، يتم تمرير إضافة الوظيفة 5 و 3 ، وهما نسخان من قيم x و y على التوالي. تستخدم هذه القيم (5 و 3) لتهيئة المتغيرات المحددة كمعلمات في تعريف الوظيفة ، ولكن أي تعديل لهذه المتغيرات داخل الدالة ليس له تأثير على قيم المتغيرات x و y خارجها ، لأن x و y كانتا أنفسهم لم ينتقلوا إلى الوظيفة في المكالمة ، ولكن فقط نسخ من قيمهم في تلك اللحظة.


ومع ذلك ، في بعض الحالات ، قد يكون من المفيد الوصول إلى متغير خارجي من داخل دالة. للقيام بذلك ، يمكن تمرير الحجج بالتزكية، بدلا من بالقيمة. For example, the function duplicate in this code duplicates the value of its three arguments, causing the variables used as arguments to actually be modified by the call:

To gain access to its arguments, the function declares its parameters as references. In C++, references are indicated with an ampersand ( & ) following the parameter type, as in the parameters taken by duplicate in the example above.

When a variable is passed by reference, what is passed is no longer a copy, but the variable itself, the variable identified by the function parameter, becomes somehow associated with the argument passed to the function, and any modification on their corresponding local variables within the function are reflected in the variables passed as arguments in the call.

In fact, a , b , and c become aliases of the arguments passed on the function call ( x , y , and z ) and any change on a within the function is actually modifying variable x outside the function. Any change on b modifies y , and any change on c modifies z . That is why when, in the example, function duplicate modifies the values of variables a , b , and c , the values of x , y , and z are affected.

If instead of defining duplicate as:

Was it to be defined without the ampersand signs as:

The variables would not be passed by reference, but by value, creating instead copies of their values. In this case, the output of the program would have been the values of x , y , and z without being modified (i.e., 1, 3, and 7).

Efficiency considerations and const references

Calling a function with parameters taken by value causes copies of the values to be made. This is a relatively inexpensive operation for fundamental types such as int , but if the parameter is of a large compound type, it may result on certain overhead. For example, consider the following function:

This function takes two strings as parameters (by value), and returns the result of concatenating them. By passing the arguments by value, the function forces a and b to be copies of the arguments passed to the function when it is called. And if these are long strings, it may mean copying large quantities of data just for the function call.

But this copy can be avoided altogether if both parameters are made references:

Arguments by reference do not require a copy. The function operates directly on (aliases of) the strings passed as arguments, and, at most, it might mean the transfer of certain pointers to the function. In this regard, the version of concatenate taking references is more efficient than the version taking values, since it does not need to copy expensive-to-copy strings.

On the flip side, functions with reference parameters are generally perceived as functions that modify the arguments passed, because that is why reference parameters are actually for.

The solution is for the function to guarantee that its reference parameters are not going to be modified by this function. This can be done by qualifying the parameters as constant:

By qualifying them as const , the function is forbidden to modify the values of neither a nor b , but can actually access their values as references (aliases of the arguments), without having to make actual copies of the strings.

Therefore, const references provide functionality similar to passing arguments by value, but with an increased efficiency for parameters of large types. That is why they are extremely popular in C++ for arguments of compound types. Note though, that for most fundamental types, there is no noticeable difference in efficiency, and in some cases, const references may even be less efficient!

Inline functions

Calling a function generally causes a certain overhead (stacking arguments, jumps, etc. ), and thus for very short functions, it may be more efficient to simply insert the code of the function where it is called, instead of performing the process of formally calling a function.

Preceding a function declaration with the inline specifier informs the compiler that inline expansion is preferred over the usual function call mechanism for a specific function. This does not change at all the behavior of a function, but is merely used to suggest the compiler that the code generated by the function body shall be inserted at each point the function is called, instead of being invoked with a regular function call.

For example, the concatenate function above may be declared inline as:

This informs the compiler that when concatenate is called, the program prefers the function to be expanded inline, instead of performing a regular call. inline is only specified in the function declaration, not when it is called.

Note that most compilers already optimize code to generate inline functions when they see an opportunity to improve efficiency, even if not explicitly marked with the inline specifier. Therefore, this specifier merely indicates the compiler that inline is preferred for this function, although the compiler is free to not inline it, and optimize otherwise. In C++, optimization is a task delegated to the compiler, which is free to generate any code for as long as the resulting behavior is the one specified by the code.

Default values in parameters

In C++, functions can also have optional parameters, for which no arguments are required in the call, in such a way that, for example, a function with three parameters may be called with only two. For this, the function shall include a default value for its last parameter, which is used by the function when called with fewer arguments. For example:

In this example, there are two calls to function divide . In the first one:

The call only passes one argument to the function, even though the function has two parameters. In this case, the function assumes the second parameter to be 2 (notice the function definition, which declares its second parameter as int b=2 ). Therefore, the result is 6.

The call passes two arguments to the function. Therefore, the default value for b ( int b=2 ) is ignored, and b takes the value passed as argument, that is 4, yielding a result of 5.

Declaring functions

In C++, identifiers can only be used in expressions once they have been declared. For example, some variable x cannot be used before being declared with a statement, such as:

The same applies to functions. Functions cannot be called before they are declared. That is why, in all the previous examples of functions, the functions were always defined before the main function, which is the function from where the other functions were called. If main were defined before the other functions, this would break the rule that functions shall be declared before being used, and thus would not compile.

The prototype of a function can be declared without actually defining the function completely, giving just enough details to allow the types involved in a function call to be known. Naturally, the function shall be defined somewhere else, like later in the code. But at least, once declared like this, it can already be called.

The declaration shall include all types involved (the return type and the type of its arguments), using the same syntax as used in the definition of the function, but replacing the body of the function (the block of statements) with an ending semicolon.

The parameter list does not need to include the parameter names, but only their types. Parameter names can nevertheless be specified, but they are optional, and do not need to necessarily match those in the function definition. For example, a function called protofunction with two int parameters can be declared with either of these statements:

Anyway, including a name for each parameter always improves legibility of the declaration.

This example is indeed not an example of efficiency. You can probably write yourself a version of this program with half the lines of code. Anyway, this example illustrates how functions can be declared before its definition:

Declare the prototype of the functions. They already contain all what is necessary to call them, their name, the types of their argument, and their return type ( void in this case). With these prototype declarations in place, they can be called before they are entirely defined, allowing for example, to place the function from where they are called ( main ) before the actual definition of these functions.

But declaring functions before being defined is not only useful to reorganize the order of functions within the code. In some cases, such as in this particular case, at least one of the declarations is required, because odd and even are mutually called there is a call to even in odd and a call to odd in even . And, therefore, there is no way to structure the code so that odd is defined before even , and even before odd .

Recursivity

Recursivity is the property that functions have to be called by themselves. It is useful for some tasks, such as sorting elements, or calculating the factorial of numbers. For example, in order to obtain the factorial of a number ( n! ) the mathematical formula would be:

n! = n * (n-1) * (n-2) * (n-3) . * 1
More concretely, 5! (factorial of 5) would be:

5! = 5 * 4 * 3 * 2 * 1 = 120
And a recursive function to calculate this in C++ could be:


Functions of Management

Management has been described as a social process involving responsibility for economical and effective planning & regulation of operation of an enterprise in the fulfillment of given purposes. It is a dynamic process consisting of various elements and activities. These activities are different from operative functions like marketing, finance, purchase etc. Rather these activities are common to each and every manger irrespective of his level or status.

Different experts have classified functions of management. According to George & Jerry, “There are four fundamental functions of management i.e. planning, organizing, actuating and controlling”.

According to Henry Fayol, “To manage is to forecast and plan, to organize, to command, & to control”. Whereas Luther Gullick has given a keyword ’POSDCORB’ where P stands for Planning, O for Organizing, S for Staffing, D for Directing, Co for Co-ordination, R for reporting & B for Budgeting. But the most widely accepted are functions of management given by KOONTZ and O’DONNEL i.e. Planning, Organizing, Staffing, Directing و Controlling.

For theoretical purposes, it may be convenient to separate the function of management but practically these functions are overlapping in nature i.e. they are highly inseparable. Each function blends into the other & each affects the performance of others.

Planning

It is the basic function of management. It deals with chalking out a future course of action & deciding in advance the most appropriate course of actions for achievement of pre-determined goals. According to KOONTZ, “Planning is deciding in advance - what to do, when to do & how to do. It bridges the gap from where we are & where we want to be”. A plan is a future course of actions. It is an exercise in problem solving & decision making. Planning is determination of courses of action to achieve desired goals. Thus, planning is a systematic thinking about ways & means for accomplishment of pre-determined goals. Planning is necessary to ensure proper utilization of human & non-human resources. It is all pervasive, it is an intellectual activity and it also helps in avoiding confusion, uncertainties, risks, wastages etc.

Organizing

It is the process of bringing together physical, financial and human resources and developing productive relationship amongst them for achievement of organizational goals. According to Henry Fayol, “To organize a business is to provide it with everything useful or its functioning i.e. raw material, tools, capital and personnel’s”. To organize a business involves determining & providing human and non-human resources to the organizational structure. Organizing as a process involves:

  • Identification of activities.
  • Classification of grouping of activities.
  • Assignment of duties.
  • Delegation of authority and creation of responsibility.
  • Coordinating authority and responsibility relationships.

Staffing

It is the function of manning the organization structure and keeping it manned. Staffing has assumed greater importance in the recent years due to advancement of technology, increase in size of business, complexity of human behavior etc. The main purpose o staffing is to put right man on right job i.e. square pegs in square holes and round pegs in round holes. According to Kootz & O’Donell, “Managerial function of staffing involves manning the organization structure through proper and effective selection, appraisal & development of personnel to fill the roles designed un the structure”. Staffing involves:

    (estimating man power in terms of searching, choose the person and giving the right place).
  • Recruitment, Selection & Placement. . . .
  • Promotions & Transfer.

Directing

It is that part of managerial function which actuates the organizational methods to work efficiently for achievement of organizational purposes. It is considered life-spark of the enterprise which sets it in motion the action of people because planning, organizing and staffing are the mere preparations for doing the work. Direction is that inert-personnel aspect of management which deals directly with influencing, guiding, supervising, motivating sub-ordinate for the achievement of organizational goals. Direction has following elements:

Supervision- implies overseeing the work of subordinates by their superiors. It is the act of watching & directing work & workers.

Motivation- means inspiring, stimulating or encouraging the sub-ordinates with zeal to work. Positive, negative, monetary, non-monetary incentives may be used for this purpose.

Leadership- may be defined as a process by which manager guides and influences the work of subordinates in desired direction.

Communications- is the process of passing information, experience, opinion etc from one person to another. It is a bridge of understanding.

Controlling

It implies measurement of accomplishment against the standards and correction of deviation if any to ensure achievement of organizational goals. The purpose of controlling is to ensure that everything occurs in conformities with the standards. An efficient system of control helps to predict deviations before they actually occur. According to Theo Haimann, “Controlling is the process of checking whether or not proper progress is being made towards the objectives and goals and acting if necessary, to correct any deviation”. According to Koontz & O’Donell “Controlling is the measurement & correction of performance activities of subordinates in order to make sure that the enterprise objectives and plans desired to obtain them as being accomplished”. Therefore controlling has following steps:

  1. Establishment of standard performance.
  2. Measurement of actual performance.
  3. Comparison of actual performance with the standards and finding out deviation if any.
  4. Corrective action.

Learn management concepts & skills rapidly with easy to understand, richly illustrated self-paced learning modules & downloadable powerpoint presentations.

Download DEMO Presentation Now!.

As a premium member, you get access to view complete course content online and download powerpoint presentations for more than 200 courses in management and skills area.


شاهد الفيديو: Jobs Song for Kids Part 2. Who Do You See? Educational Learning Video. Learn English Children (شهر نوفمبر 2021).