الكتابة الثابتة لا تتطلب بالضرورة مراسم

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


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


مراسم


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


الاحتفال هو ما تفعله قبل أن تبدأ في فعل ما كنت ستفعله حقًا.

فينكات سوبرامانيام

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


قادني ذلك إلى فكرة وجود منطقة احتفالية مؤسفة:



بالطبع ، هذا المخطط مجرد تبسيط ، لكنني آمل أن يوضح الجوهر. C ++ و Java و C♯ هي لغات تتطلب الاحتفال. إلى اليمين توجد لغات يمكن أن نسميها عبر الاحتفال ، بما في ذلك F♯ و Haskell.


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


عدد قليل من الاحتفالات في جافا سكريبت


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


> consume ([1,2,3], 1);
[ 2, 3 ]
> consume ([1,2,3], 2);
[ 3 ]
> consume ([1,2,3], 3);
[ 3 ]
> consume ([1,2,3], 4);
[]

, 1, 2, 3, quantity 2 3 . , quantity 4, , . , 1 3.


JavaScript :



JavaScript-, , , , . 17 , . , , , . JavaScript . , , , .


C♯


JavaScript C♯. C♯ :



, . . , , , , .


. int . , long?


:



short? . decimal? . byte? .


, .


F♯


F♯ :



, . , :


quantity: ^a -> (seq< ^b> -> seq< ^b>)
  when ( ^a or  ^b) : (static member ( + ) :  ^a *  ^b ->  ^a) and
        ^a : (static member get_Zero : ->  ^a) and  ^a : comparison

, , , , . , decimal, :


> consume 2 [1;2;3];;
val it : seq<int> = seq [3]

> consume 2m [1m;2m;3m];;
val it : seq<decimal> = seq [3M]

, . consume "foo" [true;false;true] .


F♯ ( , C♯), : . , " ". , , , , - .


Haskell


Haskell:



. . GHCi , :


> :t consume
consume :: (Foldable t, Ord a, Num a) => a -> t a -> [a]

F♯ , . Foldable ( , . ), , Ord Num. Num , Ord — .


, F♯ Haskell , . , , C♯ Java. , .



, C++, Java C♯. , , , , .


, .


, F♯ Haskell. -. : .

Source: https://habr.com/ru/post/ar482834/


All Articles