سؤال

أي شخص يعرف ما يختلف عن معالجة دلفي 2009 من "مع"؟

قمت بإصلاح مشكلة أمس فقط عن طريق تفكيك "مع" المراجع الكاملة، كما هو الحال في "مع Datamodule، DataSet، Mainform". دلفي 2006 وأطبق سابق "إغلاق" إلى مجموعة البيانات. تطبيق Delphi 2009 "إغلاق" إلى Mainform وإخراج الطلب!

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

المحلول

لم يتغير شيء. ملاحظتك السابقة كانت خاطئة. الكائنات المذكورة في with تعتبر البيان "الحق في اليسار،" لذلك في مثالك، MainForm سيتم البحث أولا، ثم Dataset, ، وثم Datamodule. وبعد هذه هي الطريقة التي كانت دائما. هو نفسه كما لو كنت كتبت هذا:

with Datamodule do
  with Dataset do
    with MainForm do begin
      Close;
    end;

المضي قدما وتحقق من وثائق دلفي 2006؛ يجب أن يكون هناك قسم اسمه التصريحات والبيانات, ، بموجبها ستجد البيانات المهيكلة, ، بما في ذلك القسم على مع البيانات.

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

نصائح أخرى

With هو الشر. لا أعرف كم مرة أحتاج أن أقول هذا، ولكن يبدو أننا لسنا هناك بعد.

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

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

على سبيل المثال، دعونا نفترض أن لديك هذا:

with connection, file do
begin
    Close;
end;

ثم ماذا تتوقع أن تحدث؟ حسنا، من الطبيعي إغلاق ملف، لذلك أتوقع إغلاق الملف. دعنا نفترض مزيدا من ذلك أن متغير الملف هذا يحمل كائن من النوع Tsomeoddfile الذي لا يحدد طريقة إغلاق، بل طريقة مقربة. سيتم بعد ذلك إغلاق البيان أعلاه للبيان بدلا من ذلك.

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

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

إذن أجل، with سوف يعضك في **.

استخدام with A,B,C,D من الممارسات السيئة لأن التغييرات في الوحدات الأخرى يمكن أن تتسبب فجأة في إيقاف التعليمات البرمجية عن العمل كما هو متوقع. يرى هنا لمزيد من المعلومات، أو هنا (البحث عن "with keyword").

عادة ما يكون المترجم صلبا جدا، لذلك لن أفترض خطأ أو تغيير قبل أن استبعد كل شيء آخر حقا. بعض الأشياء التي يمكنني التفكير بسرعة في:

1) انظر إذا كنت تستخدم الوظائف أو المشغلين الزائدين. نظرا لأن تعريف السلسلة (وعدة أنواع أخرى) قد تغيرت، يمكن اختيار متغير مختلف، لأن التوقيع يتغير بشكل فعال.

2) يمكن أن يكون أيضا أن بعض الوحدات المضمنة تحدد الآن معرف يستخدم بالفعل، وأعرب الأسبقية على المكشوف في وحدة مختلفة.

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

أضف ذلك (أو عنوان URL) هنا، فمن المثير للاهتمام دائما أن نرى.

مع دو هو أن تستخدم بعناية. خلاف ذلك، هو مصدر لانهائي للصداع .... وأنا أتفق مع روب كينيدي وغيرها.

مثل كريج ستونتيز (في منشور آخر حول ... هل) و Lasse V. Karlsen. ذكر أعلاه، مع دو يمكن أن تخلق الكثير من الفخاخ.

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