سؤال

على سبيل المثال، http://developer.apple.com/cocoa/pyobjc.html لا يزال لنظام التشغيل OS X 10.4 Tiger، وليس 10.5 Leopard..وهذه هي وثائق Apple الرسمية لذلك ..

صفحة PyObjC الرسمية سيئة بنفس القدر، http://pyobjc.sourceforge.net/

الأمر سيء للغاية لدرجة أنه محير..أنا أفكر في تعلم روبي في المقام الأول لأن مواد RubyCocoa موثقة بشكل أفضل، وهناك الكثير من البرامج التعليمية الجيدة (http://www.rubycocoa.com/ على سبيل المثال)، وبسبب مجموعة أدوات واجهة المستخدم الرسومية للأحذية..

حتى هذا البرنامج التعليمي الياباني المترجم بشكل سيئ تلقائيًا هو أكثر فائدة من بقية الوثائق التي يمكن أن أجدها ..

كل ما أريد فعله هو إنشاء تطبيقات Python بسيطة إلى حد ما باستخدام واجهة المستخدم الرسومية Cocoa GUI.
هل يمكن لأي شخص تسليط الضوء على الوثائق الرهيبة، أو توجيهي إلى بعض البرامج التعليمية التي لا تمنحك كتلًا ضخمة من التعليمات البرمجية وتفترض أنك تعرف ما هي؟ NSThread.detachNewThreadSelector_toTarget_withObject_("queryController", self, None) يفعل..؟

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

المحلول

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

هكذا قال…

كل ما أريد فعله هو كتابة تطبيقات Cocoa دون الحاجة إلى تعلم ObjC.

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

في الوقت الحالي، ستستفيد أكثر إذا رأيت هذه الجسور بشكل واقعي مفيدة حيث تتألق لغات البرمجة النصية حقًا، بدلاً من محاولة إنشاء تطبيق كامل باستخدامها.بينما هذا لديه تم إنجازه (باستخدام LimeChat، أستخدم حاليًا تطبيقًا مكتوبًا بـ RubyCocoa)، وهو أمر نادر ومن المحتمل أن يظل كذلك لفترة من الوقت.

نصائح أخرى

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

أفضل طريقة لتحسين التوثيق هي التطوع للمساعدة في القائمة البريدية لـ pyobjc-dev.

جانبا:تعد القائمة البريدية pythonmac-sig (انظر google) مصدرًا ممتازًا للحصول على مساعدة بشأن Python على MacOSX (وليس فقط PyObjC).

لكي نكون صريحين:

إذا كنت تريد أن تصبح مبرمجًا فعالاً في مجال الكاكاو، فيجب أن تتعلم لغة Objective-C.نهاية القصة.

لا تعد Python أو Ruby بديلاً عن Objective-C عبر الجسور الخاصة بهما.لا يزال يتعين عليك فهم واجهات برمجة تطبيقات Objective-C، والسلوكيات المتأصلة في الفئات المشتقة من NSObject، والعديد من التفاصيل الأخرى الخاصة بـ Cocoa.

يعد PyObjC وRubyCocoa طريقة رائعة للوصول إلى وظائف Python أو Ruby من تطبيق Cocoa، بما في ذلك إنشاء تطبيق Cocoa في الغالب - إن لم يكن بالكامل - في Python أو Ruby.لكن النجاح فيها يعتمد على الفهم الشامل لـ Cocoa وواجهات برمجة التطبيقات Objective-C التي تتكون منها.

من المؤكد أن رد توم ومارتن صحيح (في أي مشروع مفتوح المصدر تقريبًا، ستجد أن معظم المساهمين مهتمون بشكل خاص بـ، حسنًا، النامية;ليس كثيرًا في الأمور شبه ذات الصلة مثل التوثيق)، لكنني لا أعتقد أن سؤالك المحدد في النهاية سيكون مناسبًا بشكل جيد داخل وثائق PyObjC.

NSThread.detachNewThreadSelector_toTarget_withObject_("queryController", self, None)

NSThread هو جزء من Cocoa API، وعلى هذا النحو موثقة في شركة أبل, ، بما في ذلك الطريقة الخاصة + detachNewThreadSelector:toTarget:withObject: (سأقوم بالارتباط هناك، ولكن يبدو أن تدفق المكدس يحتوي على أخطاء في تحليله).ويكي CocoaDev لديه أيضا مقال.

لا أعتقد أنه سيكون من الجيد أن يحاول PyObjC توثيق Cocoa، بخلاف بعض الأمثلة الأساسية حول كيفية استخدامه من داخل Python.من المحتمل أيضًا أن يكون شرح المحددات خارج نطاق PyObjC، حيث إنها أيضًا إحدى ميزات Objective-C، وليس PyObjC على وجه التحديد.

لقد عثرت على برنامج تعليمي جيد حول PyObjC/Cocoa:

http://lethain.com/entry/2008/aug/22/an-epic-introduction-to-pyobjc-and-cocoa/

كل ما أريد فعله هو إنشاء تطبيقات Python بسيطة إلى حد ما باستخدام واجهة المستخدم الرسومية Cocoa GUI.هل يمكن لأي شخص تسليط الضوء على الوثائق الرهيبة، أو توجيهي إلى بعض البرامج التعليمية التي لا تمنحك كتلًا ضخمة من التعليمات البرمجية وتفترض أنك تعرف ما يفعله NSThread.detachNewThreadSelector_toTarget_withObject_("queryController"، self، none) ..؟

[...]

كل ما أريد فعله هو كتابة تطبيقات Cocoa دون الحاجة إلى تعلم ObjC.

على الرغم من أنني أتفق بشكل أساسي مع رد سورين، إلا أنني سأذهب إلى أبعد من ذلك:

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

NSThread.detachNewThreadSelector_toTarget_withObject_("queryController", self, None) 

هذه هي طريقة بايثون لكتابة سطر Objective C:

[NSThread detachNewThreadSelector:@selector(queryController:) toTarget:self withObject:nil];

والآن من المهم أن نلاحظ هنا أن هذا الخط يمكن رؤيته بطريقتين:(1) كسطر للهدف C، أو (2) لاستدعاء أطر الكاكاو.ونراه (١) من حيث النحو.نحن نراها على أنها (2) من خلال إدراك أن NSThread هو إطار عمل Cocoa يوفر مجموعة من الميزات المفيدة.في هذه الحالة، يُسهّل إطار عمل Cocoa الخاص هذا علينا جعل الكائن يبدأ بفعل شيء ما في سلسلة رسائل جديدة.

لكن الركل هو هذا:يوفر لنا إطار عمل Cocoa هنا (NSThread) هذه الخدمة المفيدة بطريقة مرتبطة بشكل صريح باللغة التي تمت كتابة إطار العمل بها.وهي أن NSThread أعطانا ميزة تشير بوضوح إلى "المحددات".المحددات، في الواقع، هي اسم لشيء أساسي حول كيفية عمل Objective C.

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

من أجل الحصول على ترجمة خالية من فقدان البيانات ولا لبس فيها بين رسائل Objective-C وطرق Python، فإن ما يعادل اسم أسلوب Python هو ببساطة المحدد مع استبدال النقطتين بشرطات سفلية.

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

لم أكن أعرف أي شيء على الإطلاق عن Objective C أو Cocoa (لكنني أعرف الكثير عن Python)، لكنني الآن أكتب تطبيقًا معقدًا إلى حد ما في PyObjc.كيف تعلمت؟التقطت برمجة الكاكاو لOSX وقمت بمراجعة الكتاب بأكمله (عملية سريعة جدًا) باستخدام PyObjC.فقط تجاهل أي شيء يتعلق بإدارة الذاكرة وستكون على ما يرام إلى حد كبير.التحذير الوحيد هو أنه في بعض الأحيان يتعين عليك استخدام مصمم ديكور مثل endSheetMethod (في الواقع أعتقد أن هذا هو الوحيد الذي قمت بالضغط عليه):

@PyObjcTools.AppHelper.endSheetMethod
def alertEnded_code_context_(self, alert, choice, context):
    pass

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

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

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