سؤال

لقد تم العمل مع TCL/TK ,بدأت مؤخرا في استخدام TCL/TK مع تطبيقات الأتمتة و أنا جائع للمعرفة.

إلى مواصلة سلسلة طويلة من ميزة خفية الأسئلة أود أن أعرف أي خفية أو الميزات المفيدة من TCL/TK أو أي طريقة سهلة لتحقيق بعض العمليات الكبيرة ،

هل كانت مفيدة؟

المحلول

عند أعلن رجل التسويق في صن أن تى سى ال و"المؤسسة جاهزة"، وأضاف المطورين الميزة التالية:

$ tclsh
% clock format [clock seconds] -format %Q
Stardate 63473.2

نصائح أخرى

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

وبينما معظم لغات لديها قواعد التي المحددات كتلة يجب أن تستخدم لأشياء معينة (على سبيل المثال، في C يجب استخدام {} لتعيين كتلة)، تى سى ال ليس صارمة للغاية.

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

وهذا يعني، على سبيل المثال، يمكنك تحديد إجراء في نواح كثيرة، بما في ذلك:

proc foo {args} {
    .... body here ....
}

proc foo "args" "
    .... body here ....
"

proc foo args [some code that returns the body]

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

والآن، وكثير من الناس ينظرون إلى ذلك ويقول WTF؟ ولكن هل حقا يعطي الكثير من السلطة للمبرمج. ونحن في كثير من الأحيان الحصول على الأسئلة في comp.lang.tcl على غرار "إذا كنت تفعل" هذا {و$ أن}، كيف يمكنني الحصول على $ التي لتوسيعها؟ ". الجواب يتبع نكتة قديمة "المريض: الطبيب، وهذا يضر عندما أفعل هذا الطبيب: لا تفعل ذلك". وهذا هو، إذا كنت لا تحب سلوك تحصل مع مجموعة واحدة من المحددات، واختيار بعض محدد الآخرين. فقط لأن إذا تم بناؤه بيان عادة مع الأقواس المعقوفة لا يعني أنه يجب سيتم تشييدها مع الأقواس المعقوفة.

وهذا هو بلدي المفضلة لميزة "الخفية" للتى سى ال. انها ليست خفية - انها على حق كاملة رائعة بعد موجزة الصفحة رجل تى سى ال (ن)، ولكن تداعيات ليست واضحة حتى جروك تماما كيف يعمل تى سى ال.

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

$ tclsh
% 2+2
invalid command name "2+2"
% proc unknown args {uplevel 1 [linsert $args 0 expr]} 
% 2+2
4

ويمكن الاطلاع على مزيد من الأمثلة على صفحة ويكي على الراديكالي اللغة تعديل

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

proc varlimit_re {re var key op} {
  upvar $var v
  if { [regexp -- $re $v] <= 0 } {
    error "$var out of range"
  }
}

trace add variable ::myvar {write} [list varlimit_re {^[A-H]\d{3}-[0-9a-f]+$}]`

إذا حاولت تعيين "myvar" إلى أي شيء لا تطابق التعبير العادي، سوف تحصل على خطأ وقت التشغيل.

وميزة مفيدة الذي لا يخفى ولكن لا يميل إلى أن يكون واضحا للأشخاص القادمين من لغات أخرى هو أنه يمكنك تحديد هياكل المراقبة الخاصة بك (أو حتى إعادة تعريف القائمة إذا كنت تريد أن تعيش بشكل خطير). وهناك أمثلة على rel="noreferrer">

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

وجميع من "المصطلحات" تى سى ال هم تى سى ال العادية الأوامر، بما في ذلك هياكل المراقبة مثل [ل]، [foreach]، [مع]، وما إلى ذلك وهذا يعني أنك يمكن أن تمتد اللغة من خلال كتابة هياكل المراقبة الجديدة في التعليمات البرمجية تى سى ال النقي.

وعلى سبيل المثال، محاولة / على / فخ هيكل وقد تم تنفيذها في تى سى ال 8.6a باستخدام رمز تى سى ال الوحيد. وبالمثل يحتوي tcllib السيطرة :: افعل، افعل / بينما هيكل الرقابة.

ويتم إجراء الكثير من هذا ممكن من خلال [upvar] والأوامر [ذو المستوى الأعلى]، والتي تسمح لك بالوصول إلى المتغيرات أو تنفيذ التعليمات البرمجية في إطار مكدس مختلفة.

IMHO أعظم ميزة خفية من Tcl هو C API. باستخدام هذا, فإنه من السهل حقا التفاف الأساسية برنامج C أو الفرعي كتابة واجهة المستخدم الرسومية أو وظائف أخرى في Tcl.في حين أن هذه الميزة ليست فريدة من نوعها Tcl, Tcl كانت تهدف إلى القيام بذلك من الألف إلى الياء و C API خاصة وسهلة للعمل مع.

ثاني أكبر ميزة خفية هو باكر, الكبير-أبي من كل هندسة المديرين.مع هذا, واجهة المستخدم الرسومية يمكن أن يكون كبيرة ويندوز مع من المستغرب كمية صغيرة من التعليمات البرمجية.من المهم أن نلاحظ أن Tcl/Tk قد هندسة الإدارة على الأقل قبل 10 سنوات .صافي خرجت.

ثالث أكبر ميزة Tcl هو القدرة على لexend اللغة ، إما عن طريق C API أو مع الأوامر المحددة في Tcl.ليس تماما اللثغة وحدات الماكرو ، ولكن مرنة جدا مع ذلك. نتوقع هو مثال جيد جدا من تطبيق بنيت حول تمديد باس Tcl اللغة لجعل المجال محددة لغة البرمجة.

تحرير: حسنا, تبا لي, Xt حقا كان مدير الهندسة, على الرغم من أنني أتفق مع Nat في هذا الأمر إلى حد ما أكثر إيلاما من حزمة. -}

  1. [array names] هي واحدة من أولى المسائل نوبي يسأل عن كيفية تكرار عبر مجموعة
  2. أيضا حقيقة أنه يمكنك foreach {key1 key2} {$list1 $list2} {...} - حتى لو كانت قوائم مختلفة الحجم
  3. يجب عدم استخدام التعليقات التبديل بين حالات (هذه ليست ميزة رائعة ولكن مشكلة معظم المطورين لا يفهمون
  4. على rename الأمر يمكن إعادة تسمية أي وظيفة/proc

وأعتقد أن الوقت الأمر رائعا. انها ليست خفية تماما ولكن هذا لا يمنع الناس من يسأل "التي هي وظيفة بشكل أسرع" مرة واحدة في أثناء وجوده في comp.lang.tcl.

وفي أي وقت كنت تريد أن تعرف "وكم من هذه تأخذ؟" أو "الأسلوب الذي هو أسرع؟" استدعاء مجرد أنه عبر الأمر "الوقت". لا خلق الأشياء، لا الرياضيات، لا النفقات العامة وبسيطة للغاية. لغات أخرى لديها ميزة مشابهة، بالرغم من أن بعضها أقل قليلا أنيقة.

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

وفي الآونة الأخيرة، وحزم تى سى ال وTKX بيرل تعطينا حديثة المظهر في واجهة المستخدم الرسومية. واثنين من وحدات المذكورة أعلاه، في حين لا تافهة، ينطوي على رمز صغيرة نسبيا، معتبرا ما تسمح لأحد القيام به عبر حدود اللغة. والتي يمكن أن تكون يعزى مباشرة إلى API ممتاز (وقوة بيرل، من الواضح).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top