>> [عزف الموسيقى]
>> DAN AMRMENDARIZ: الجميع، مرحبا بكم في الندوة CS50،
دائرة الرقابة الداخلية تطوير التطبيق مع سويفت.
أنا دان ارمينداريز، وأنا مؤدب علم الحاسوب هنا في جامعة هارفارد.
>> وساعة القادمة ستكون جولة مكوكية في الكثير من الاشياء
حول هذا الموضوع ونحن يمكن أن يصلح.
سأقوم كافة التعليمات البرمجية المصدر التي سوف ترى اليوم على الانترنت.
ونحن قد لا تكون قادرة على يذهب في الواقع على كل شيء
أنني أنني يظهر لك في هذه الساعة.
ولكن على الأقل نأمل من خلال تعليقات شفرة المصدر،
عليك أن تكون قادرا على محاولة معرفة ما بالضبط ما يحدث لتلك الأشياء
أننا لا تحصل تماما.
>> وعموما، فإن هيكل سوف نتحدث اليوم على النحو التالي.
سنبدأ من القيام ببعض الأساسية جملة مع اللغة سويفت،
الخوض في بعض من أكثر تقدما بناء جملة لغة سويفت.
لأن اللغة هو حديث حقا، وأنه
لديه الكثير من مستوى عال ميزات، والأشياء التي ليس لدينا
ينظر في جميع أنحاء C CS50، أو حتى بعض اللغات الأخرى
أننا قد بدأت ل استخدام في CS50 مثل PHP،
لذلك أنا ذاهب لديك في محاولة ل يعرض أيضا بعض الموضوعات التي
ترتبط اللغات عالية المستوى أنك قد لا ترى في العمق في CS50،
لكن سترون في وقت لاحق دروس علوم الكمبيوتر.
لذلك سيكون ل معبأة بإحكام ساعة.
وتتردد في اسمحوا لي معرفة ما إذا كان لديك أي أسئلة.
لذلك إذا كنت مهتما في القيام التطوير
مع سويفت، أو حقا أي تطوير التطبيق دائرة الرقابة الداخلية،
هناك اثنين من المتطلبات.
أولا وقبل كل شيء، عليك أن تستخدم ماك، على التوالي في الأمثلة
أننا ذاهبون إلى استخدام اليوم، نسخة جديدة نسبيا من OS
X. وفي هذه الحالة، أنا تشغيل X 10.5.
يمكنك أن تشغل 10.11 إذا كنت تريد.
ولكن كل ما كنت ذاهب ل رؤية بإشراك كسكودي 7 و في وقت لاحق،
الذي يحتوي على أحدث نسخة من سويفت، وهو سويفت 2.0.
هذا هو في الواقع جميلة تمييز مهم.
وهناك الكثير من بناء الجملة ديه تغيرت بشكل كبير جدا
في بعض الحالات من سويفت 1.0، الذي صدر في العام الماضي،
لسويفت 2.0، والتي خرج للتو في خريف هذا العام.
لذلك نحن ذاهبون لاظهار سويفت 2.0.
وهناك الكثير من الأشياء التي كنت ابحث عن الانترنت
عندما كنت في محاولة للحصول على إضافية معلومات عن مجموعة متنوعة من الأشياء،
قد تحتاج إلى صراحة البحث عن سويفت 2
بدلا من مجرد سويفت القديم سهل لجعل تأكد من أنك تحصل على بناء الجملة الصحيح.
>> في الواقع، وهذا صحيح بشكل عام.
هناك كمية السريع للتنمية يحدث في لغة سويفت
منذ أصدرت أبل ذلك، وأعتقد ما، لقد كان ما يزيد قليلا عن العام
الآن.
وتغيرت الأمور بشكل كبير في ذلك الوقت.
وحتى لا تكون محبطة إذا، عندما كنت أبحث في جميع أنحاء
لالموضوعات المدرجة على سويفت أو كيفية تحقيق شيء باستخدام بعض رمز المثال
أو شيء من هذا أنه لا فعلا العمل على سويفت 2.0.
تأكد من أنك تبحث خصيصا لهذا الإصدار
في محاولة للحد من آثار مختلفة إصدارات وتلك الأنواع من الأشياء.
>> سأحاول أن أشير فقط بعض الأشياء التي تختلف عن الإصدارات القديمة.
ولكن هذا شيء لمشاهدة ل.
وهذا ربما سيكون واحدة من أكبر الصداع
أنه سيكون لديك مع سويفت هو العثور على رمز المثال أن أقدم، حتى مجرد
قبل بضعة أشهر، في محاولة لاستخدام في المزيد من المشاريع الحديثة الخاصة بك.
وببساطة لا يعمل.
كنت تحصل أخطاء مترجم، جملة أخطاء، وجميع أنواع الأشياء المجنونة.
لذلك يكون مجرد المريض مع هذا، وسوف نأمل
لدينا تجربة جميلة جدا مع عموما سويفت.
>> يمكنك الآن فعلا join-- وآمل ونحن في الواقع لا تزال لديها هذا هذا year--
CS 50 آبل التطبيق فريق التطوير، التي
سوف يسمح لك لتثبيت أي تطبيقات التي تقوم بإنشائها على أجهزة دائرة الرقابة الداخلية الخاصة بك.
حتى تأخذ نظرة على هذا URL إذا كنت مهتما في القيام بذلك.
>> حتى مجرد بضع أشياء عن سويفت نفسها.
إنها لغة المترجمة.
ولكن سوف نرى أن بعض من الميزات التي نستخدمها
تسمح لها أن تستخدم أيضا في بعض الشيء مثل تفسير الطريقة أيضا.
>> وهناك الكثير من بناء الجملة هو استعار من C. انها تقوم وكتب في C.
ولذا فإننا سوف نرى أن هناك الكثير من الوجبات السريعة
من المعرفة الموجودة لديك من C ما في وسعنا لميناء سويفت.
>> ولكن هناك أشياء جعلها مختلفة جدا من C.
يتم كتابتها بقوة جدا عليه.
هناك إدارة الذاكرة التلقائية.
كنت لا تسير لدينا ل استخدام malloc أو في أي مكان مجانا.
انها مصممة للعموم.
لذلك وبعبارة أخرى، يمكن استخدامه في كل أنواع السياقات، من شركة أبل ووتش
الى اي فون كل وسيلة تصل إلى OS X، و حتى بعض الخوادم، وحتى بعض البرمجة.
ولكن سنرى أن دعم للبرمجة
ليس هناك تماما حتى الآن كما فمن بلغات أخرى.
لذلك على الأرجح أنك سوف تكون باستخدام هذا على وجه الحصر من أجل التنمية
على ماك أو اي فون الخاص بك.
>> وأنه يحتوي على الكثير من الميزات الحديثة.
والكثير من هذه الأمور الاشياء التي ونحن في طريقنا لمحاولة التصدي اليوم،
ولكن أيضا لدينا الموضوعات التي بصراحة، يمكننا تخصيص دورات بأكملها.
في الواقع، CS 51، وهو عرضت الفصل الدراسي المقبل،
يركز كثيرا على هذه المواضيع الموضحة أدناه.
حتى تتمكن من قضاء فصل دراسي كامل فهم هذه الأمور.
لكننا سنحاول للحصول على خلالهم
على الأقل بما يكفي أنك يمكن أن نفهم ما هو
يحدث عندما نظرتم في برنامج سويفت
وتكون قادرة على الإختراق طريقك من خلال ذلك للمشروع النهائي.
>> الآن واحدة من أفضل الطرق التي يمكنك الحصول على معلومات إضافية عن هذا
هو بصراحة للتو من أبل قدمت وثائق للسويفت.
هناك الكثير من واجهات برمجة التطبيقات المتوفرة.
وهذا هو قاعدة المنزل جيدة بالنسبة لك للبحث عن الأمور المحددة التي
تريد أن تفعل مع API التي تنطوي على دائرة الرقابة الداخلية.
إذا كنت ترغب في استخدام الكاميرا ل سبيل المثال، يمكنك البدء في النظر هنا،
وأيضا استخدام غوغل والمكدس تجاوز كما تفعل عادة.
>> أي أسئلة حول هذا قبل أن الحق في القفز؟
حسنا.
دعنا ننتقل.
>> لذلك أولا، ولدي عدد الملفات سبيل المثال.
وانا ذاهب الى محاولة للتدخل من خلال عليها بسرعة نسبيا.
هذا هو الملف مرحبا العالمي للسويفت.
الأمر في غاية البساطة.
هناك طريقة والمزيد من التعليقات من هناك الرمز الفعلي.
لاحظ الرمز الفعلي هو في أسفل جدا على خط 14.
تقول الطباعة.
ثم انها استدعاء دالة.
نحن يمر فيه ل ودعا سلسلة مرحبا cs50.
لاحظ أنه لا يوجد منقوطة.
لاحظ أنه لا يوجد كثافة العمليات الرئيسية.
هناك أيا من الغبار المتراكم تحت السرير التي أجريناها مع C.
عندما نستخدم سويفت في هذا السبيل، الذي هو مكتوب فقط في ملف نصي
وتخزينها على جهاز الكمبيوتر الخاص بي، ثم يمكنني ترجمة عليه وتشغيله.
>> لاحظ أن هنا أنا لا تستخدم IDE CS50.
هذا يفترض أنني تعمل، وأنا على OS X،
وبأنني كسكودي المثبتة مسبقا على هذا الجهاز من أجل هذا
إلى وظيفة في الواقع.
ولكن هذا هو مجرد ملف نص عادي أننا يمكن بعد ذلك تجميع وتحرير.
لذلك دعونا نرى كيف يعمل هذا الواقع.
ماذا لو أريد لتجميع ذلك؟
1.swift swiftc.
بعد لحظة أو اثنتين، فإنه سوف نرى أن لدينا الآن
جمعت هذا إلى ملف يسمى 1.
والآن لدينا طبع CS50 لدينا، لدينا تطبيق مرحبا العالمي إلى حد ما.
>> لاحظ الشيء الآخر كما كذلك هو أن افتراضيا،
لم يكن لدينا لإدخال و/ ن لطباعة سطر جديد.
بشكل افتراضي، وظيفة الطباعة في سوف سويفت طباعة سطر جديد بالنسبة لك.
يمكنك تمرير اختياري إضافي المعلمة ليقول لا للقيام بذلك.
ولكن جوجل لمزيد من المعلومات حول ذلك.
افتراضيا، انها لن تفعل خط الطباعة.
>> كل الحق، لذلك دعونا ننتقل ثم إلى بعض الأشياء الأخرى.
فكيف نحدد فعلا المتغيرات؟
يمكننا أن نفعل ذلك باستخدام واحدة من طريقتين.
واحد أريد أن اقول لكم حول الأول هو هذا التعريف اسمحوا.
وهذا هو المهم لأن فعال
ما نقوم به هو تعريف ثابت.
نحن بصدد إنشاء متغير، أو بالأحرى دعا اسم ثابت،
تقدم إليه بعض data-- في هذه الحالة، سلسلة دان.
ولكن باستخدام هذا اسمحوا الكلمة، ما نقوله
أن هذا variable-- أو مرة أخرى constant-- يسمى
اسم أبدا على وشك أن يتغير.
انها سوف يكون غير قابل للتغيير في جميع أنحاء مدة هذا البرنامج
أو في جميع أنحاء مدة السياق
أن هذا المتغير هو متاح.
>> هذا هو المهم حقا أنه عندما لديك بعض البيانات غير
الذهاب الى تغيير في البرنامج، وسترى مجموعة متنوعة من الأمثلة
حول عندما نريد استخدام دعونا مقابل بناء الجملة الأخرى،
من المهم أن استخدامك السماح حيثما كان ذلك ممكنا لأن هذا بإعلام
اللغة التي هو لن يتم تغيير،
ويمكن أن تؤدي في الواقع الكثير من التحسينات
لتحسين سرعة و سلامة البرنامج.
والسلامة، أعني عدم السماح ذلك الحادث مع وجود أخطاء مجنون
أننا قد تكون اعتادوا على رؤية في C.
>> ثم يمكننا استخدام سلسلة الاستيفاء لتغليف ذلك ضمن سلسلة.
حتى يمكننا أن نرى في هذا خط الطباعة، طباعة مرحبا،
ثم استخدام مائل أقواس مفتوحة، ثم اسم المتغير بلدي،
في هذه الحالة ثابتة، إغلاق الأقواس.
أنا أساسا ثم وضع محتويات هذا المتغير يسمى اسم
داخل السلسلة ومن ثم طباعة النتيجة هناك.
>> هناك تغيير واحد آخر لهذا الملف وهي التي لدي، في أعلى جدا،
وضعت في خط كوخ، الذي في الأساس يحدد فقط
أريد أن استخدام مترجم السريع، الذي
يعني أنني لم يعد لديك ل تجميع هذا البرنامج بالذات.
يمكنني فقط تشغيله مثل السيناريو الخاص بها.
ولكن هذا هو، في هذه الحالة، وراء مشاهد يجري تجميع ثم
يتم تشغيل.
انها مجرد غير مرئية بالنسبة لنا.
>> كل الحق، لذلك دعونا المضي قدما.
حتى لا يكون هناك قليلا من الخداع أن مجرد حدث من قبل.
أنا أظهر لكم أنني يمكن تعريف ثابت.
وأنا يمكن أن توفر بعض البيانات للقيام بذلك.
ولكن في هذه الحالة، لاحظ أنني لم في الواقع تحديد نوع البيانات
هذا هو عليه.
وهذا لأن مترجم، يمكن سويفت
نستنتج نوع البيانات تستند فقط على البيانات التي وضعت فيه.
لأنه يعلم أن من خلال تقييم هذا متغير هنا، هذا الحق البيانات
هنا، فهو يعرف أنه هو السلسلة.
وحتى هذا اسم ثابت لذلك هو ستكون سلسلة كذلك.
>> ولكن يمكننا أيضا أن يكون صريحا حول نوع هذا
نحن نذهب لاستخدامها ل الثوابت أو المتغيرات
باستخدام بناء الجملة هذا instead-- السماح يساوي سلسلة اسم القولون
دان، وهو ما يعني في هذه الحالة نحن الذهاب الى تعريف دعا اسم ثابت.
انها سوف تكون من نوع سلسلة.
والقيمة ستكون دان.
الآن الطريقة الأخرى التي يمكننا خلق variables--
وهذه هي متغيرات قابلة للتغيير، والتي يعني أننا، في الواقع، والذهاب
لتغيير محتوياتها وقت في مدة سياق
أن هذا المتغير هو defined-- نحن استخدام الكلمة فار بدلا من السماح.
ولكن مرة أخرى، افتراضيا، إلا إذا كنت تعرف التي تحتاج إلى معالجة تلك البيانات،
محاولة استخدام السماح ل تحسينات في الأداء.
>> في هذه الحالة، لا يسعني ثم تحديد نوع البيانات
أننا نتوقع أن تكون داخل هذا المتغير جديد يسمى التسمية.
انها سوف تكون سلسلة.
ونحن في طريقنا لسلسلة ثم سلسلتين معا، سلسلة مرحبا،
والسلسلة التي يمثلها متغير، أو بالأحرى اسم ثابت.
>> لذلك هذا هو لطيف لأن هذا وPHP نوعا ما مثل في أننا
يكون من السهل جدا سلسلة سلسلة.
ليس لدينا تلقائيا استخدام أي نوع من إدارة الذاكرة
لزيادة حجم والقيام أي نوع من الأشياء مضحك هناك.
هذا يعمل كما كنا نتوقع فعلا.
>> كل الحق، أي أسئلة حول هذا؟
>> الآن السبب الآخر أن نحتاج لديك القدرة
لتكون قادرة على تحديد ما نوع من المتغيرات والبيانات
غير أنه في بعض الأحيان ونحن لا تريد تهيئة المتغيرات
مع بعض البيانات في نقطة من الوضوح.
حتى في هذه الحالة، دعنا نقول أن أريد أن أبدأ إدخال
بعض الصفوف في كتاب الصف.
وأنا أعلم جيدا أن واحدا من المتغيرات التي أريد أن أكون
سيكون على درجة قابلة للتغيير.
ونحن نعرف أيضا أننا تريد أن يكون صحيحا.
ولكن ربما لم نفعل ذلك حتى الآن يكون هذا الصف المتاحة.
>> في سويفت، لديك ل تحديد نوع البيانات
مقترن مع متغير أو السماح ثابت
قبل أن تتمكن الواقع استخدام هذا المتغير.
لأن كتابته بقوة، لديك لربط نوع
مع هذه المتغيرات.
>> حتى في هذه الحالة، إذا كنت لم صحيح تهيئة الأول مع بعض القيمة،
ثم أحتاج أن أقول ما سويفت أتوقع نوع البيانات إلى أن يكون.
وانها تسير على البقاء أن نفس نوع البيانات
طوال تاريخ هذا البرنامج.
>> الآن كنت قد تميل في أقرب وقت لقد خلق هذا المتغير الصف
وشريطة أن ل صحيح 100، والآن إذا أنا
ترغب في محاولة لسلسلة سلسلة مع هذا صحيح،
قد تميل إلى الاستمرار في استخدام أن المشغل سلسلة سلسلة
كما فعلنا مجرد بضعة أسطر من قبل.
لكن لسوء الحظ، هذا سوف فعلا لا
العمل، لأنك أداء الأساس
عملية على نوعين مختلفين.
>> الآن وهذا يختلف تماما عن الآخر لغات مثل PHP التي هي في الحقيقة
goosey loosey مع الفرز من أنواع.
انهم مجرد مثل، نعم، أيا كان، لا يهمني.
فقط أعطني نوع واحد، و ربما سأفعل الشيء الصحيح.
>> في هذه الحالة، سويفت صارمة للغاية حول أنواع
أنك تتعامل مع.
هذا المشغل الجمع أو مشغل سلسلة
لديها أساسا بضع الخيارات الممكنة المختلفة.
يمكنك أن تفعل الجمع مع الأعداد الصحيحة، أو
يمكن القيام به سلسلة سلسلة، و ربما بعض الأشياء الأخرى كذلك.
ولكن إذا لم تعترف بأن المشغل ما هو على جانبي ذلك،
أو بالأحرى مجموعة من تلك نوعين، ليست ما انها تتوقع،
ثم انها سوف تتسبب في الفشل.
>> حتى في هذه الحالة، ما الذي يعنيه لدينا سلسلة بالإضافة إلى عدد صحيح؟
كذلك في سياق هذا، ونحن ربما تريد
للقيام بعملية سلسلة سلسلة.
ولكن بالطبع الكمبيوتر لم يقم هذا النوع من السياق.
ولذا فإننا بحاجة إلى توفير الحصول على معلومات إضافية
السماح لها أعرف ما هو أننا نريد أن نفعل.
>> لذلك وبعبارة أخرى، فإن حقيقة أن سويفت يتم كتابتها بقوة
يعني ما عليك القيام به ل قليلا من العمل الإضافي
للحصول عليه لتشغيل الطريقة التي تريد.
ولكن نتيجة لذلك، وهو أكثر أمانا.
وبمجرد الانتهاء من اتخاذ بعين الاعتبار تلك الأنواع،
أشياء فقط تبدأ بصراحة للعمل بشكل جيد جدا.
>> حتى في هذه الحالة، فإننا سوف ثم أداء سلسلة سلسلة
قبل الصب صراحة عدد صحيح إلى سلسلة
الاشارات في هذا عاصمة S سلسلة وظيفة،
ثم باستخدام سلسلة سلسلة المشغل لتعديل متغير تسمية لدينا،
ومن ثم طباعته.
>> حتى الان جيدة جدا؟
كل الحق، دعنا ننتقل.
>> الآن هناك مجموعة متنوعة من البيانات الأنواع التي يمكن أن نستخدمها في سويفت.
كما كنت قد تعودت على، نحن يمكن أن تخلق مجموعة قابلة للتغيير.
ويمكن أن مجموعة فقط تحتوي على نوع واحد.
>> حتى في هذه الحالة، نحن ذاهبون الى خلق لصفائف قابلة للتغيير من الأعداد الصحيحة، التي
سنطالب الدرجات، وسنتمكن لتخزين أنه في هذه قوس مربع
الشكل الذي اعتدنا لفي مجموعة متنوعة من اللغات الأخرى.
ولكن لاحظ أن هنا نحن تحديد بضعة أشياء.
الدرجات هي variable-- قابلة للتغيير نحن لن تستخدم الكلمة هوادة.
وهذا يعني أننا يمكن تعديل ثم محتويات هذه المجموعة.
هو من نوع مصفوفة كثافة العمليات، ونستطيع أن نقول أن
بناء على هذه الأقواس المربعة هنا.
>> الآن واحدة من أشياء لطيفة في هذا هو أننا
الحصول على الكثير من معلومات اضافية
حول مجموعة فقط باستخدام بعض نقطة تدوين بسيط.
هكذا على سبيل المثال، يوفر grades.count لنا
عدد العناصر الموجودة في هذا مجموعة، التي يمكننا ثم الوصول جميلة
بسهولة ببساطة باستخدام تلك نقطة تدوين.
>> إذا كنت ترغب في إضافة إضافي البنود في هذه المجموعة،
لا يمكنك أن تفعل النمط PHP حيث يمكنك فقط تحديد بشكل واضح،
في مؤشر معين، بعض القيمة الذي تريد إدراجه.
بدلا من ذلك، استخدم إلحاقي الأسلوب في نوع مصفوفة
لإلحاق هذا البند، 95، إلى هذه القائمة.
>> حتى الآن هذه المجموعة لديها ما يلي contents-- 100، 0، 90، 85.
والآن لدينا إلحاق 95 لذلك أيضا.
>> هناك طرق أخرى يمكننا إلحاق الأشياء.
يمكنك استخدام الواقع مشغل الجمع،
والتي سيتم تفسيره على أنه عملية مجموعة إلحاق.
ويمكنك بعد ذلك إلحاق أخرى مجموعة، محتوياتها هي 70 و 80،
إلى ذلك مجموعة.
حتى الآن لدينا محتويات هذا المتغير
grades-- 100، 0، 90، 85، 95، 70، و 80.
هذا هو مجرد نحوي صغيرة لطيفة السكر الذي يوفر سويفت بالنسبة لنا.
>> لذلك إذا أردنا أن ألخص لل الدرجات، نحن ربما
تريد الذهاب الى تكرار على كل عنصر في هذه الحلقة.
ولدينا، في سويفت، فكرة لحلقة for كما كنت تتوقع.
لكن الطريقة التي تبين لنا مجموعة مختلفة قليلا.
حتى في هذه الحالة، ل خلاصة كل شيء، وسوف نقوم
الذهاب لخلق مؤقتة دعا مبلغ متغير من أجل بالنسبة لنا
للحفاظ على هذا العدد.
>> وتلاحظ لدينا بناء حلقة هنا.
للمؤشر في 0 .. <grade.count.
لذلك هذا البناء، 0 .. <grades.count هي عملية نطاق ما نحن فيه
أقول إننا ذاهبون إلى خلق مجموعة من الأعداد الصحيحة من 0 حتى
لكنه باستثناء grades.count.
ولذلك فإن هذا سوف يكون 0، 1، 2، 3، 4، 5، وحتى مع ذلك العديد من واحد
قبل grades.count.
>> ولذلك فإن هذا يختلف عن الطريقة التي سوف تستخدم عادة لحلقات
حيث سيكون لديك بعض مؤشر متغير، تعيين يساوي 0 في البداية،
ثم دمج تلك حتى بعض أقل قيمة من عدد العناصر
في ذلك مجموعة.
>> حتى لا يكون هناك تعديل لهذا، في الواقع،
الذي يتيح لنا بسهولة جدا تحديد أنواع مختلفة من النطاقات.
إذا قمت بتغيير هذا النطاق ل ثلاث نقاط، 0 ... grade.count،
ويمثل هذا النطاق من 0 لgrades.count شاملة،
وهذا يعني أن هذا العدد هو أيضا ثم تدرج في هذا النطاق.
>> ولكن هذا هو مفيد جدا لهذه الأمور الدقيقة،
عندما يكون لدينا لأداء التكرارات خلال الحلقة
لأن تلك المؤشرات هي صفر فهرستها، كما رأينا في لغات أخرى
كذلك.
أي أسئلة حول هذا لحلقة؟
>> ولذلك لا يوجد تعريف الضمني هذا المتغير المؤشر،
تبدأ القيمة التي في 0، و وتواصل في كل حلقة التكرار
بنسبة 1 حتى نقطة أن يساوي grades.count،
وعند هذه النقطة، إحباط الحلقة.
>> لاحظ أنه في سلسلة لدينا الاستيفاء هنا،
نحن يمكن أن تؤدي فعلا بعض بسيطة التلاعب بتلك القيم.
ذلك مؤشر زائد 1 سوف فعلا إجراء محصلة تلك القيمة
لأن المؤشر، في هذه الحالة، وهو صحيح.
وعند هذه النقطة، وسوف ثم تحويلها إلى سلسلة
ومحرف في هذه السلسلة هنا، وطباعتها كما نتوقع. .
>> والشيء الجميل حول صفائف هنا
أننا أيضا قادرون على أن يكون قيم جلب وقيم الضبط
استخدام التدوين قوس مربع كما رأيناه في لغات أخرى أيضا.
>> كل الحق، لذلك من هنا، ونحن الآن حساب لدينا مجموع كل من درجاتنا.
الآن نوع من القادم سوف تكون الخطوة المنطقية
للقيام بعملية تقسيم للعثور على من متوسط ​​تلك الدرجات.
ولكن شيء مهم هنا يحدث أي
غير أن هذا المبلغ ربما يكون عدد صحيح.
ولكن نحن بحاجة إلى تنفيذ بعض نوع من تقسيم مزدوج.
وهذا سيكون من المهم للغاية عند
نحن نريد لتنفيذ هذه العملية، لأن ما نقوله
غير أننا في حاجة إلى الواقع أداء الفرقة على اثنين الزوجي.
ومرة أخرى، لأن سويفت يتم كتابتها بقوة،
يجب علينا أن بوضوح تعيين كل من البنود التي الزوجي قبل أن الواقع
قيام بهذه العملية.
>> وذلك من أجل بالنسبة لنا ل أداء الفرقة مزدوج،
انها ليست كافية لواحد فقط من تلك العناصر لتكون مزدوجة.
كلاهما يجب أن يكون ضعف لكي سريعة
للتأكد من أن هذه ما نريد أن نفعله.
ولذا فإننا سوف ثم التلبيس صراحة المبلغ الذي قمنا المحسوبة أعلاه
وعدد من الدرجات لالزوجي، و ثم نفذ هذه العملية وتخزين
أن في هذا المتغير الجديد، أو بالأحرى هذا ثابت جديد يسمى المتوسط،
والتي سيكون لها ما نوع، لك أن تتخيل؟
ضعف، نعم.
حتى في هذه الحالة، نحن لم يكن لديك لتحديد ذلك
لأنه يمكن الاستدلال على ذلك من تشغيل أي نوع من البيانات المتوسط
سوف.
وسويفت بشكل عام جيد جدا حول القدرة على الاستدلال على أنواع.
>> هل تريد أن ترى هذا تشغيل، أو يمكن أن أنتقل؟
أريد أن الاستمرار.
أي أسئلة عن أي من هذه؟
رائعة.
>> الآن ونحن في طريقنا للبدء في الحصول على وظائف تعريف stuff-- جيدة،
واثنين من الأنواع الأخرى التي هي فريدة من نوعها لسويفت أن لديك لا
رأيت في لغات أخرى حتى هذه النقطة،
لكنها موجودة في غيرها اللغات التي قد تجد في وقت لاحق.
لذلك أولا إذا كنت تريد لتحديد وظيفة،
يمكنك تحديد ذلك مع كلمة جبان وظيفة، ومن ثم اسم الدالة،
ثم بين قوسين، والحجج التي تريد أن وظيفة لقبول.
يجب الحجج أيضا specify-- generally--
يجب أيضا تحديد نوع البيانات التي هم، إلا أنها يمكن أن يستدل.
وسنرى أن القليل التحذير في قليلا.
>> حتى في هذه الحالة لدينا وظيفة تسمى printGradeCount.
ونحن في طريقنا لقبول variable-- أو بالأحرى في هذه الحالة،
يسمى constant-- دفتر التقديرات.
وسيكون من اكتب مجموعة من أعداد صحيحة.
الآن هناك شيء هذا هو المهم حقا هنا
أنني أريد منك أن تفهم.
هذا هو أن افتراضيا، هذه الحجج التي تعتبر مدخلات لهذه الوظيفة هي
تعرف مع الكلمة اسمحوا ضمنية، وهو ما يعني أنني لا يمكن تعديل هذا
متغير دفتر الدرجات هنا.
وهذا النوع من المنطقي، لأنك تمرير البيانات في.
وربما كنت لا تريد ذلك يجب أن يتغير من تحتك.
فمن الممكن أن يذكر صراحة أن هذا المتغير عن طريق وضع
وفار الكلمة هنا.
ولكن هذا هو مسكتك أن لدينا الناس لاحظت فعلت في الماضي
هو أنها يفترض أن يجري أن يكون متغير عندما، في الواقع،
هو ثابت.
>> كل الحق، حتى هنا بعد ذلك، في هذه الحالة، نحن لا يحدد أي نوع الإرجاع.
ونحن سوف تظهر لك كيفية القيام أن في مجرد لحظة.
ولكن لاحظ أن لدينا هنا مجرد بسيطة اذا كان الشرط.
إذا كان دفتر التقديرات هو فارغة، وهو في هذه الحالة
هو مجرد ممتلكات هذا صحيح مجموعة، فإننا طباعة شيء.
وإلا فإننا نفعل شيئا آخر.
>> جميلة واضحة حتى الآن على ما أعتقد.
ولكن يمنعني إذا كان لديك أي أسئلة.
>> الآن هذه الوظيفة، في المتوسط، ويأخذ أيضا بعض الحجج، أو بالأحرى حجة واحدة،
وهو دفتر التقديرات، وهذه المرة سوف تعود نوع مزدوج.
لأنه الحوسبة المتوسط ​​وانها
سوف تعود في الواقع أن المتوسط ​​المحسوب على خط الاتصال.
>> في هذه الحالة، فإننا تحديد العودة نوع بعد سهم.
وهذا قد يشعر نوع غريب في البداية.
كنت قد اعتادوا لوضع عودة
اكتب قبل اسم الدالة.
ولكن إذا كنت تعتقد أن هذا من ناحية الرياضيات،
مثل عندما يكون لديك الرياضيات التي تحدد وظيفة،
لديك وظيفة مع بعض المدخلات، وينتج الانتاج.
وهذا هو بالضبط ما هذا هو المفترض لتقليد.
وهناك بضعة لغات أخرى التي لها تركيب مماثل أيضا،
ولكن ربما لا شيء أن كنت قد رأيت في CS50.
ولكن لا يزال لا يجب الخلط به.
السهم يعني ما يجري إلى أن تعاد في هذه الحالة.
OK، فكيف نحن ذاهبون لحساب هذا المعدل؟
حسنا، إذا كان غراديبوك فارغ، بالاضافة الى ذلك الحين نحن
سوف تعود 0، والذي ربما وسيلة معقولة لعلاج هذا.
أنا لا أعرف، دعونا تأتي إلى أنه في قليلا.
هذا قد لا فعلا أن يكون وسيلة معقولة
لحساب المتوسط ​​إذا لدينا غراديبوك فارغة.
>> ثم سنقوم فقط أداء الجمع دينا.
لاحظ أن هنا نحن في الواقع لديك إصدار بديل ل
للحلقة، والذي يسمح لنا لتكرار على كل عنصر واحد في مجموعة
ووضع كل عنصر إلى المتغير الخاص بها.
عن طريق تحديد للصف في دفتر التقديرات، ما نقوله
غير أننا ذاهبون الى ضمنيا إنشاء ثابت جديد يسمى
الصف الذي يتم الانتقال لتمثيل كل عنصر فريد في دفتر الدرجات
في كل مرة أن لبالتكرار الحلقة.
لذا في المرة الأولى التي يتم تشغيله، سوف الصف
يكون أول بند في دفتر التقديرات.
للمرة الثانية أنه سوف يكون البند الثاني، هلم جرا وهكذا دواليك
حتى غراديبوك استنفدت نفسها من العناصر.
وبعد ذلك سوف تكون قادرة على خلاصة القول أن الصف إلى لدينا متغير الجمع
والعودة المتوسط ​​لدينا كما رأينا من قبل.
OK، أي الأسئلة؟
نعم فعلا؟
الحضور: لدي سؤالان.
رقم واحد، من الناحية النظرية، يمكن لل تشغيل صحيحا على هذا واحد؟
ليس من الضروري أن يكون مزدوج، فهل هذا صحيح؟
DAN AMRMENDARIZ: هل لك تكرار هذا السؤال؟
الحضور: هل يمكنني أن أفعل صحيح كمتوسط؟
DAN AMRMENDARIZ: هل لك قيام عدد صحيح كمتوسط؟
لذلك بإرجاع عدد صحيح المتوسط ​​بدلا من ضعف؟
>> الحضور: Return-- لك يكون ذلك الآن أدناه.
DAN AMRMENDARIZ: الحق هنا، يعود 0.0؟
الجمهور: نعم، يعود فقط 0.
لذلك سوف يكون إما 80 أو 85، ولكن ليس 85.2.
>> DAN AMRMENDARIZ: حتى في هذه الحالة، لذلك هناك بضعة طرق مختلفة
للإجابة على ذلك.
اسمحوا لي أن الإجابة عليها في النظام.
حتى لو كنت مجرد جعل هذه العودة 0 و0 هو قيمة عددية.
وبحيث يؤدي إلى خطأ نوع لهذه الحالة
لأنه يتوقع مزدوج ولكن بعد ذلك تعود صحيح.
إذا كنت ترغب في إرجاع عدد صحيح، أستطيع.
أنا يمكن أن يحدد نوع الإرجاع لكثافة العمليات، والعودة 0 هنا،
ويتم تنفيذ تقسيم مزدوج.
ولكن بعد ذلك سنكون القيام قسمة عدد صحيح.
ولذا فإننا ثم لن تحصل على متوسط ​​أننا ربما نتوقع.
ولكن نعم يمكننا تعديل أنواع بهذه الطريقة.
>> الحضور: وثانيا، ل لديهم مزدوجة واحدة على القمة.
ولكن بانخفاض أدناه، عند تفعل العودة مزدوجة،
هذا بالفعل تلقائيا عودة شكل مزدوج.
لماذا لا تزال بحاجة إلى تحديد ذلك مع السهم على أعلى مع مزدوجة؟
>> DAN AMRMENDARIZ: حتى في هذه الحالة، وهذا هو جزء
من the-- ذلك لتكرار السؤال، لأنه ضمني من عودة
أنواع هنا، ما نوع هذه التسديدة هو، ونحن بحاجة إلى أن تكون صريحة مع سويفت
حول ما نريد العودة من هذه الوظيفة
بحيث عندما ينفذ اكتب فحص، ويمكن التأكد من
ان ما كتبناه في الواقع الأسفل يتفق فعلا لذلك.
لذلك نوع من مثل شيك مع نفسك النوع من الحالات.
ولكن هناك--
>> الحضور: (غير مسموع) السهم؟
>> DAN AMRMENDARIZ: هناك حالات عندما يمكننا تحديد ما في وسعنا ضمنا
تعيين نوع الإرجاع.
ولكن في هذه الحالة، وأنا لا أعتقد أن ذلك العمل.
هناك بعض جملة أخرى أننا سنرى لاحقا.
>> كل الحق، لذلك هذا المصدر كود يختلف قليلا
لأن هذا يوزع الحجج من وظيفة أننا الدعوة.
اسمحوا لي أن تظهر لك كيف يعمل قبل أن فعلا الانتقال
إلى بعض الأمور المثيرة للاهتمام وهذا ما يحدث في سويفت.
>> حتى في هذه الحالة، إذا أنا فقط تشغيل هذا كود، لاحظ أن ما تقوم به
في حين is--، انها نوع من يعطيني خطأ غريب.
ولست بحاجة لتمرير ذلك عدة الأعداد الصحيحة كما وسيطة سطر الأوامر.
لذلك دعونا نرى، 150 و 80، وهاهنا لمعرفة ما تقوم به فعلا.
انها قبول كل من هذه القيم كما أعداد صحيحة.
انها إدخال لهم في دفتر التقديرات.
ثم انها المنفذ أن متوسط ​​حساب
وإخراج ما كنا نتوقع.
>> ولكن من الواضح أن هناك شيئا ما يجري على هذا شيء رفض
شيء كعدد.
كما قد نتذكر من عندما كنا التعامل مع وسائط سطر الأوامر
في C وغيرها من اللغات، أول جدا المقال 0-التاسع في أن وسيطة سطر الأوامر
القائمة اسم الأمر أننا تنفيذه فعلا.
حتى في هذه الحالة، أنا مجرد حلقات على كل وسائط سطر الأوامر.
ولكن أنا لا أفعل أي نوع من الهوى تحقق لتخطي هذا أول واحد.
أنا مجرد صراحة أو ضمنا أنا التحقق من أي من هذه الأنواع
أعداد صحيحة قبل أن الواقع تنفيذ هذا الحساب.
>> وهذا هو الأساس ماذا يحصل هنا.
لكل حجة في الحجج للعملية،
أنا ذاهب لأداء بعض الاختيار.
وفي هذه الحالة، أنا ذاهب في محاولة لتحويل الأول
هذه الحجة إلى عدد صحيح من قبل إجراء عملية التلبيس صريح،
لأنه، على المدخلات، سلسلة وليس في الواقع صحيح.
>> ولكن هذا هو نوع من جملة غريبة، إذا الصف السماح يساوي الباحث (حجة).
ما يحدث في الواقع هنا هو غاية
من المهم أن باستخدام سويفت.
هذا هو استخدام ما هو دعا نوع اختياري.
>> حتى هذه الوظيفة، كثافة العمليات (حجة)، يعود ليس فقط عدد صحيح، ولكن العائدات
ما يسمى صحيح اختياري.
وحيث أن هذا النوع من نوع على رأس النوع.
يمكنك النوع من تخيل ذلك مثل انها تعود مثل الحزمة.
وعند فتح هذا الحزمة، فإنه إما
لديه عدد صحيح، والذي هو نتيجة، أو كان لديه أي شيء على الإطلاق في ذلك على الإطلاق.
وهذا مفيد باعتباره التحقق من الخطأ آلية، لأنه في هذه الحالة
يمكننا معرفة، وكان هذا نوع التحويل الناجح؟
إذا كان، ثم هو في الواقع ستكون لدينا عدد صحيح في الداخل.
وإلا فإنه ستكون لدينا بعض القيمة التي سوف ندعو النيل، التي
هو ممثل أي عدد صحيح على الإطلاق.
انها حقا ممثل من لا شيء.
>> وحتى هذا إذا البناء يسمح لنا لبسط تلك الحزمة،
أن اختياري ملزمة.
وإذا نحن قادرون على بسط ذلك حزمة والعثور على عدد صحيح في الداخل،
ثم ما نقوله هنا هو أننا سوف ثم
تسمح هذه القيمة إلى أن يتم تعيين إلى هذا الثابت يسمى الصف.
وهذا جزء من بيان إذا، الجزء العلوي من بيان إذا
سيتم تشغيل، لأن ذلك وبسط ناجحة.
>> إذا كان مجرد أن ذلك يحدث كان هناك خطأ ربما
في هذا النوع تحويل صريح من سلسلة إلى عدد صحيح، ربما
انها ABC القيمة على سبيل المثال.
وهذا في الواقع لن تحويل إلى عدد صحيح.
ثم فإنه سيعود النيل، وهو ليس صحيحا.
وإذا بيان هذا جيدا ثم تفشل.
الصف لن توجد ل انه ليس لديها محتوى صحيح.
وسيتم تشغيل هذه الكتلة آخر بدلا من ذلك.
نعم فعلا؟
>> الحضور: النيل هو N-I-L؟
DAN AMRMENDARIZ: لا شيء هو N-I-L، نعم.
>> لذلك هذا هو ربما واحدة من اصعب الامور حول سويفت،
وخصوصا عندما كنت في الأعشاب على تطبيق iOS
وكنت في الواقع محاولة للقيام ببعض التنمية هناك.
انها سوف يكون الصراخ في لكم عن اختياري.
انها على وشك أن يطلب منك ل علامات استفهام والتعجب.
ولكن بمجرد معرفة out-- إذا كنت تخصيص بعض الوقت لمعرفة
ما يحدث مع أنواع اختياري، سوف توفر على نفسك الكثير من الصداع
كما تحاول كتابة التطبيق في سويفت.
>> انها في الواقع ميزة قوية جدا.
وسيكون لديك فقط ل تأخذ كلمة بلدي لذلك في الوقت الراهن.
ولكن سنرى هذا البناء والبعض الآخر مثل ذلك
في بعض شفرة المصدر الآخر الذي سنعرض لكم في قليلا.
>> هل هناك أي أسئلة الأولية هنا؟
لذلك الوجبات الجاهزة هامة هي أن نوع اختياري هو نوع من metatype.
إما له قيمة، وإذا كان كذلك، فإنه
سيكون لديك ربما تلك القيمة المرتبطة مع ذلك، أو أنه لا قيمة له على الإطلاق،
ويتم تمثيل من قبل شيء.
بقية ولعل هذا هو كما كنت تتوقع.
>> لذلك دعونا تكثيف لل صعوبة مرة أخرى.
وهذه المرة، دعونا نلقي نظرة على بعض أنواع البيانات الأخرى التي توجد في الواقع.
واحد منهم هو القواميس، والتي هي تشبه الى حد بعيد قواميس بيثون.
انها تشبه إلى حد ما في جدول تجزئة جيم هو أساسا تعيين مفاتيح
حيث يمكن أن تكون مفاتيح السلاسل.
وعندما قمت بالبحث تلك المفاتيح، وتلك المفاتيح يكون لها قيمة.
حتى انها ليست تماما صفيف، ولكن بدلا من ذلك، يرتبط بشكل وثيق
لخريطة تجزئة أو جدول تجزئة.
>> دعونا نرى كيف هذا هو المفترض للعمل قبل أن الواقع
الذهاب إلى رمز المصدر نفسه.
إذا أنا فقط تشغيل هذا، لا شيء يحدث حقا.
انها تقول لي أن أتوقع بعض المعلمات من النوع التالي.
لذلك أنا ذاهب لتقديم ل ذلك بعض الأسماء المشكلة مجموعة،
pset0 ذلك، ربما حصلت على 100.
وpset1، وأنا حصلت على 5.
ثم في الامتحان، I حسنا فعل حقا وحصلت على 30.
وعفوا، أنا ضربت الفضاء هنا.
>> عندما كنت هاهنا، يمكنك ان ترى ينفذ بعض العمليات الحسابية عليها.
تقول غراديبوك ثلاث الدرجات، pset1، pset0، الامتحان.
وغراديبوك له هذا المعدل المحدد.
ذلك مرة أخرى، ونحن نعمل مع هذه الفكرة دفتر التقديرات،
ولكن نحن في طريقنا لمواصلة بالتكرار مع تعقيد وظيفتنا.
>> لذلك في البداية، نحن فقط الذهاب الى إنشاء دالة
هو المسؤول عن طباعة الاستخدام.
وهناك هذا الخروج وظيفة والتي سوف فقط
الإقلاع عن التدخين قسرا التطبيق.
هذا ليس شيئا ستستخدمها في دائرة الرقابة الداخلية التطبيق.
هذا هو فقط، في هذه الحالة، مع وسيطة سطر الأوامر.
التالي سنبدأ التحرك نحو كسكودي.
ولكن هذا هو محدد لأمر برنامج نمط الخط في سويفت.
>> دعونا نلقي نظرة على بعض من الأمور المثيرة للاهتمام هنا.
دعونا نرى، سوى بضع أشياء مثيرة للاهتمام أن أذكر ربما
غير أن في بلدي ظيفة طباعة عدد من الدرجات،
تذكرون أن كان لي أن قائمة من pset1 items--، pset0، والامتحان.
يمكنك بسرعة فعلا والقيام بذلك بسهولة
من خلال اتخاذ دفتر التقديرات، وهو القاموس الذي لديه مفاتيح والقيم.
البحث عن مفتاح من خلال طريقة مفاتيح نقطة هنا،
ومن ثم استخدام هذا joinWithSeparator، والتي سوف تتخذ كافة مفاتيح
أننا قد كتبته في، أو pset1-- آسف، pset0، pset1، وexam--
وسلسلة معا باستخدام فاصلة والفضاء
لخلق سلسلة واحدة طويلة.
هذه العملية هي مجرد الانضمام هائل مفيدة في مجموعة متنوعة من السياقات.
وذلك هو هذا joinWithSeparator.
>> وهذا هو الشيء الوحيد الذي ل تغير من سويفت 1 إلى 2 سويفت.
هناك تستخدم ليكون الثعبان style-- إذا كنت
دراية Python-- بايثون أسلوب الانضمام الطريقة على السلاسل.
ولكن هذا لم يعد الحال في سويفت 2.
تريد استخدام هذا إذا كنت تريد لسلسلة مجموعة من الاشياء
جنبا إلى جنب مع سلسلة.
>> لذلك ربما بعد ذلك في موقعنا مناقشة المتوسط ​​من قبل،
يجعل أكثر قليلا المعنى بالنسبة لنا لتعيين وظيفة المتوسط
أن يكون اختياري مزدوج بدلا من مجرد ضعف واضح.
لأنه كان علينا أن حالة غير عادية حيث،
ماذا لو غراديبوك الواقع لا يوجد لديه القيم في داخلها؟
ما ينبغي أن متوسط ​​العائد؟
>> حسنا ربما في C لك قد فعلت شيئا
كما وفرت قيمة الحارس، مثل 0.0، أو ربما رقما سالبا،
أو مجرد شيء يمثل حقيقة أن هناك بعض شرط الخطأ
وأنت ربما لم يكن لديك فعلا القدرة على حساب ذلك المعدل.
حسنا جمال مع تحديد سوف يكون نوع اختياري للقيام بذلك.
وأنا الآن قائلا عن هذه الكلمات، ولكن هذا الواقع لا تستخدم اخليارات.
ولكننا سوف نرى أن في مجرد دقيقة حيث أننا يمكن أن يحدد متوسط
أن يكون نوع بيانات اختيارية بحيث إذا كان في الواقع يعود بعض البيانات، ثم
سنعود تلك البيانات.
وإلا فإننا سوف يعود لا شيء، معتبرا أن هذا
لا يوجد لديه حساب ذات مغزى.
>> دعنا ننتقل إلى شيء آخر.
لذلك من هنا، كنا نبحث في كل هذه الأمثلة في سطر الأوامر.
ولكن في الحقيقة ما كنت تريد الذهاب أن يكون التعامل مع غير كسكودي.
واحدة من أشياء لطيفة عن كسكودي هو، وعلى وجه التحديد في سويفت،
هو أن لدينا هذا شيء يسمى الملعب.
والملعب هو لا على الإطلاق التطبيق دائرة الرقابة الداخلية.
ولكنه يسمح لك تجربة مع سويفت بطريقة سهلة جدا.
يمكنك كتابة كل من التعليمات البرمجية.
هو لطيف بناء الجملة تمييزه هنا.
عند إنشاء ملف جديد، فإنه سيطلب إذا كنت ترغب في إنشاء الملعب.
ولكن الشيء الجميل في الملعب غير أنه في حق من النافذة،
أنها لا تظهر في الواقع كنت الإخراج من التعليمات البرمجية.
حتى لو كنت انتقل لأسفل، يمكننا أن نرى ما إخراج خطوط مختلفة من التعليمات البرمجية
يحدث في الواقع أن يكون.
>> حتى في هذه الحالة، نحن ذاهبون ل تغيير الاتجاهات قليلا
والحديث عن شيء حقا المهم أن هذه الطريقة على مستوى عال
أن سويفت تعمل فيها، وذلك هذا هو فكرة الإغلاق.
وربما كنت قد رأيت هذا قليلا في جافا سكريبت.
لذلك عليك أن هي في CS50، وإغلاق
هي شعبية جدا، وسيلة جيدة جدا للقيام أشياء رفيع المستوى في اللغات الحديثة.
لكنه أيضا نوع من الصعب التفاف حول رأسك مرة الأولى.
حتى إذا كنت تبحث في هذا المرة الأولى، وهذا موافق.
مجرد إلقاء نظرة على شفرة المصدر ونرى إذا كان يمكنك معرفة ذلك في المنزل.
>> حتى في هذه الحالة، دعونا نقول أننا تريد أن تخلق الكثير من الدعاه
مع بعض قيمة ثابتة.
حتى في هذه الحالة يمكنني إنشاء دالة.
انا ذاهب الى نسميها قوة 2 الغرض الذي الوحيد في الحياة
هو اتخاذ بعض المدخلات ومضاعفة ذلك، والعودة تلك القيمة.
لاحظ أن هنا أنا قبول نوع واحد من البيانات.
انها ستكون متغير يسمى السينية.
انها من نوع مزدوجة.
وانا ذاهب لإرجاع مزدوجة هنا.
وأنا ذاهب لمجرد القيام جدا، وبصراحة، جميلة
طريقة ساذجة مضاعفة هذه القيمة.
وسوف تظهر لك لماذا هذا هو مفيد فقط في الثانية.
>> لاحظ أن هنا لدينا هذا النطاق ثانية. عن شيء في 1 نقطة
نقطة نقطة، 2، وهو ما يعني أن سيتم تشغيل هذه الحلقة مرتين.
ولكن هذا يمثل المتغير الوهمي.
وهذا يعني أنني لست حقا ل يتم استخدام هذا المتغير في أي مكان
داخل هذه الحلقة.
أنا فقط أريد هذا الخط من التعليمات البرمجية لتشغيل مرتين،
دون الحاجة إلى معرفة قيمة هذا النطاق.
>> حتى في هذه الحالة أنا نتيجة تشغيل مرات اكس مرتين، والتي في جوهرها
يعني أنا تربيع هذه القيمة.
وهذا يحدث ل العمل ونحن تتوقع.
قوة 2، تمرير قيمة 2.0 يعطينا الناتج من 4.
3.2 يعمل من أجل 10.24.
>> الآن يمكننا أن نفعل مماثلة شيء لقوة 3.
ولكن الآن فقط تغيير النطاق.
لالمتغير الوهمي في 1 خلال 3، وتتضاعف 3 مرات،
وتفعل الشيء نفسه.
>> ولذلك فإن هذا قد تشعر مفتعلة قليلا.
ولكن هناك هام الشيء الذي هنا
غير أن النظر إلى هذه وظيفتين، هناك
شيء واحد فقط وهذا يختلف، وهو هذه القيمة في النطاق.
كل شيء آخر عن هذين وظائف، وقوة 3 وقوة 2،
هي، في الواقع، متطابقة ل كانوا يعملون في نفس الطريق.
>> حتى في هذه النقطة، قليلا جرس انذار يجب الخروج.
نأمل أن ما تقوله، كما تعلمون، هذا يشعر قليلا
مثل ازدواجية الجهود.
ربما هناك طريقة التي أود تكون قادرة على تغلف كل هذا
وتوفير وظيفة أو إنشاء دالة
يفعل بالضبط ما أريد دون الحاجة إلى كتابته بشكل صريح.
وهذا ما قوة لإغلاق يتيح لنا أن نفعل.
لذلك دعونا نلقي نظرة على هذا.
وسوف أقضي بضع دقيقة حول هذا الموضوع، لأن هذا
من المهم جدا بالنسبة سويفت.
نرى هذا في كل وقت.
ونحن في طريقنا لتحديد وظيفة.
انها تسير على تسميته powerOf.
انها تسير على قبول دعت المعلمة ص من نوع int.
لكن نلقي نظرة على نوع الإرجاع.
نوع الإرجاع هو، في بين قوسين، مزدوج سهم مزدوج.
وهو ما يعني أن هذه الوظيفة، هذه الوظيفة powerOf،
تعود وظيفة.
أن يتم قبول مزدوجة وتعود مزدوج.
بحيث قد يبدو نوعا من الجنون، ولكن دعونا انتقل لأسفل قليلا
وننظر لنرى ما سيحدث.
نحن داخل هذه الوظيفة powerOf.
نحن بصدد إنشاء وظيفة جديدة دعا exponentiator،
ولكن لا يهم ما هو عليه.
>> لاحظ أن هذا له قيمة مدخلات السينية.
وانها تتخذ في مزدوجة وتعود مزدوج.
وهذا هو نفس رمز أننا رأى أعلاه، إلا أن قيمة 2
أو قيمة 3، التي الحد الأعلى في هذا النطاق،
تم استبدال مع هذه قيمة y، التي
وكانت المعلمة الأولى وظيفة powerOf لدينا.
وعند هذه النقطة، ونحن العودة exponentiator.
نحن عودته وظيفة.
>> انها نوع من مثل العقل قليلا تهب.
ولكن دعونا نتخيل ما يحدث عندما كنت استدعاء هذه الدالة powerOf
وتمر فيه بعض القيمة مثل 2.
ما يعنيه هذا هو أن لدي الآن قيمة
2 لذ، وهو ما يعني أن هذه القيمة ذ في هذه الوظيفة exponentiator
سوف تكون تلك القيمة 2.
ولكن أعود هذا وظيفة exponentiator.
>> لذلك تلاحظ ما يقول سويفت I خلقت في هذه الحالة.
ترك الساحة هو تعريف، انها وظيفة يقبل مزدوجة
وترجع مزدوجة.
لقد خلق وظيفة أن الساحات شيء
باستخدام هذه الآلية هنا.
وحقا ما يحدث هو أن تعود هذه الوظيفة
exponentiator، ولكن هذه القيمة يتم تغليف ذ داخل منه.
وحتى الآن في كل مرة كنت تستخدم هذا متغير أو ثابت يسمى هذا
مربع، وانها تسير تتصرف بوصفها وظيفة.
وحتى أتمكن من ثم استدعاء هذا المتغير كما يمكن أن أسميه وظيفة،
ويمر فيه عدد، في مثل هذه الحالة 3.
وأنا ثم تربيع هذه القيمة.
حتى 3 المربعة وبعد ذلك تصبح 9، كما يمكننا أن نرى هنا.
>> مجنون حقا، ولكن هذا الآن يتيح لي الفرصة
لخلق وظائف powerOf أخرى.
كما أستطيع أن أقول، حسنا، حسنا الآن أريد لخلق وظيفة جديدة، powerOf (3)،
وتخزين تلك إلى ثابت يسمى مكعب.
والآن مكعب سيكون ل وظيفة منفصلة من شأنها أن ثم
يستغرق بعض القيمة كمدخل والمكعب الذي قيمة كما نرى في الخلاصة
هنا.
مكعب من 2 سوف يؤدي إلى 8.
>> الاشياء نأمل أنيق جدا.
لقد رأيت هذا من قبل أبدا.
وأهيب بكم أن ننظر إلى الإغلاق والتحقيق في هذا أكثر قليلا.
انها قوية الاشياء حقا أننا نرى الكثير في جافا سكريبت وبعض اللغات الأخرى.
إلا أنه من المهم حقا أن فهم واجهات برمجة التطبيقات وكذلك
أننا سنصل إليها في ثانية فقط.
نعم فعلا؟
>> الحضور: عند القيام powerOf (2)، بين قوسين، ثم
قوسين آخر، input-- أخرى كنت استبدال أساسا الساحة.
DAN AMRMENDARIZ: فانظر في السطر الأخير جدا هنا.
هو في الواقع من الممكن تماما ل فعل ذلك تسلسل كما اقترحتم.
حتى powerOf (5) يعني أننا ذاهبون أن يكون لها exponentiator من 5 إلى هنا.
لذلك هذا هو الأساس ستكون نفس الشيء 4 إلى السلطة الخامسة،
لأننا قمنا بإنشاء exponentiating تعمل لقوة الخامسة،
ونحن يمر في التي تعمل قيمة 4.
ونحصل على هذه القيمة أن نتوقع، 1024.
الحضور: وانها ليست اسم، لذلك يسهل
لقراءة، وساحة أيا كان.
>> DAN AMRMENDARIZ: الحق، بالضبط.
حتى قبل أن مجرد وضعها إلى ثابت هنا حتى
أنه يجعل من السهل استخدام هذا الاسم.
نعم فعلا؟
>> الجمهور: وفي هذا السياق powerOf، انها جزء
لغة البرمجة على عكس الطريقة التي
التفكير في powerOf في (غير مسموع)؟
DAN AMRMENDARIZ: حتى في هذه الحالة، powerOf
هو مجرد اسم وظيفة أنني محددة هنا.
حتى انها ليست الأصيل للغة نفسها،
ولكن بدلا من ذلك، انها مجرد وظيفة لديها
بهذا الاسم لأعطيها هذا الاسم.
أي أسئلة أخرى؟
حسنا.
>> الآن هذا شيء عظيم.
ولكن كنت لن نرى الكثير من الوظائف التي الإغلاق
هي من هذا القبيل حيث يمكنك تحديد داخل وظيفة واحدة، وظيفة أخرى.
ويمكنك أن تفعل ذلك.
ولكن هذا النوع لا ضروري حقا، أليس كذلك؟
مثل لماذا لا يمكنني تحديد هذا وظيفة تسمى exponentiator
ثم إعادته على الفور.
لماذا لا يمكنني فقط على الفور العودة هذه الوظيفة؟
>> وفي الواقع، وهذا هو بالضبط الفكرة وراء مفهوم يسمى
وظائف مجهولة، حيث وظائف مجهول لا فعلا
يكون اسم لأنها لا تحتاج أن يكون واحدا.
وحتى في هذه الحالة، في 7B، يمكن أن نجد بالضبط.
انها كل نفس الرمز، يفعل بالضبط نفس الشيء،
ولكن الآن لقد تغيرت قليلا حتى أن هذه الوظيفة powerOf فورا
ترجع وظيفة.
لاحظ أنه بعد العودة، هناك قوس مجعد مفتوحة.
انها تتوقع هذه المدخلات مزدوجة.
انها تتوقع ان انتاج مزدوجة.
وبعد ذلك في الكلمة يفصل القانون نفسه.
لذلك هذا هو وظيفة غير معروفة.
لم يكن لديك فعلا اسما، في حين قبل كانت تسمى exponentiator.
ولكن كما رأينا، فقط حقا لم يشر إلى exponentiator
خارج تلك الوظيفة.
لذلك لا يهم.
لذلك هذا هو وظيفة مجهول ما يسمى لأنه مجهول،
ولكن لا يزال قيد الاستخدام في سياق هذا الرمز.
>> تلك المقبلين أنا سنواصل نأمل
تهب عقلك قليلا.
يمكننا تبسيط هذا أكثر من ذلك.
لأنه كما كان بذكاء وأشار في وقت سابق،
ربما نحن نعرف في الواقع، عن طريق استنتاج من هذا الرمز، ما
إخراج هذا الرمز سيكون.
وفي الواقع، في هذه الوظيفة مجهولة، يمكننا في الواقع يستنتج أنواع البيانات.
>> حتى في هذه واحدة، ونحن لم يعد تحتاج إلى تعريف صراحة
نوع البيانات التي يجري المدخلات والمخرجات من هذه الوظيفة
لعدة أسباب.
واحد هو أن لدينا المعرفة، حتى في نموذج من وظيفة تضم،
ما نوع البيانات هذا المجهول ينبغي ظيفة المدخلات والمخرجات.
ومن جهة أخرى، ونحن يمكن أن نستنتج من التعليمات البرمجية
إلى هنا أننا نتقبل المدخلات التي هي من نوع مزدوج
وتعود مزدوج.
>> لاحظ أن هنا ليس لدينا بشكل واضح تعريف أسماء الحجج
أن هذه الوظيفة هو قبول.
وهكذا نرى أننا يمكن أن يشير إلى تلك المعلمات باستخدام $ 0 $ 1،
هلم جرا وهكذا دواليك، وهذا يتوقف على عدد تلك المعلمة المستخدمة
في هذه الوظيفة.
>> هذا هو الشيء الذي أنت ذاهب لرؤية الكثير من هذه الفئة مجعد مفتوحة
تعريف تليها $ 0 ثم بعض العمليات،
ثم شريحة مجعد مغلقة.
هذا هو وظيفة مجهول التي تنفذ هذه العملية.
كان لديه هذه المعلمة حيث انها نوع من الاستدلال.
تلك المعلمة الأولى هي 0 $.
وبعض العملية يحدث في ذلك $ 0.
>> الحضور: حتى علامة الدولار يعني المعلمة في الأساس،
و0 يعني أول واحد؟
DAN ارمينداريز: هذا صحيح.
وبالتالي فإن علامة الدولار يعني أساسا معلمة، و0 يعني أول واحد.
ولكنه يعمل على وجه التحديد في هذه الحالة حيث أنني لم يعين
الحجج في بلدي وظيفة غير معروفة.
>> الحضور: هل بيرل أو شيء يكون هذه علامة الدولار، الدولار 0 هناك؟
DAN ارمينداريز: هل الذي، أنا آسف؟
الحضور: هل لدى بيرل هذا الدولار 0، الدولار 1--
DAN ارمينداريز: أنا لا مألوفة جدا مع بيرل،
ولكن ما يحدد المتغيرات PHP استنادا إلى علامات الدولار.
وربما تكون هناك بعض اللغات التي لها ميزات مثل هذا.
في الواقع، سويفت يستعير الكثير من الميزات مثل هذا
من الكثير من لغات أخرى.
نرى تلميحات من بيثون في ذلك.
هذا التعريف من نوع يبدو أن تأتي من OCaml.
ونحن لدينا فقط مجموعة كاملة من الاشياء من الكثير من لغات مختلفة.
هذا واحد من لطيفة أشياء عن سويفت
غير أنه يأخذ الكثير من أفضل الأفكار من مجموعة من اللغات
وshoehorns لهم جميعا معا إلى لغة عظمى واحدة.
في الواقع، إذا سمحتم لي أن تواصل تهب عقلك،
هكذا كنا نفعل كل هذا.
يمكننا ربما تبسيط هذا قليلا بت تحقيق ذلك، بطبيعة الحال،
سويفت لديه exponentiating وظيفة بنيت فيها
إذا كنت استيراد داروين، الذي هو مجرد مكتبة
ميزات هذه الوظيفة دعا الأسرى، الآن يمكنني تبسيط قوتي وظيفة
أن يكون يلي.
أريد لها أن تكون العودة هذه الوظيفة مجهولة.
>> ولكن ننظر كيف بسيط هذا هو الآن.
هذه هي وظيفة مجهولة يقبل بعض نوع من البيانات،
وأنها ستكون واحدة حجة على وجه التحديد،
المشار إليها في $ 0 هذا هو من نوع مزدوجة.
هو ذاهب للعودة إلى نوع مزدوجة.
لكن البيان العودة هو الآن ضمنا.
>> وهذا هو أسلوب الدقيق الذي جدا، جدا سائدة في سويفت،
في كل مكان.
ونحن في طريقنا لرؤية هذا كل الوقت في سويفت.
لذلك أنا تظهر كل هذا ل لك بسبب هذا النحو.
وهذا أمر شائع جدا لمعرفة، مما يعني أنه
هي وظيفة مجهول الذي يجري
بعض العمليات على هذه الحجج.
وهناك عودة ضمنية.
لذلك هو تماما نفس الشيء بالنسبة لنا أن نقول هذا، والحق هنا.
>> لأن هذا مجعد قوس هو وظيفة،
نحن إجراء هذه العملية على الحجة الأولى.
ونحن في طريقنا للعودة ذلك.
ولكن هذه العودة الخارجي هو العودة أن وظيفة كاملة،
أن وظيفة مجهول كاملة بعد أن قمنا بإنشائها.
أي أسئلة أخرى؟
كل الحق، وأنا لا أعرف إذا كان يا رفاق على استعداد لذلك،
ولكن يمكننا أن نذهب حتى جنونا مع سويفت.
هل انت مستعد؟
OK، وهذا شيء عظيم.
>> الآن لدينا بالفعل القدرة ل، في سويفت، بسبب الطريقة حدات
وكيف بروتوكول يقوم هو، ل تعريف لدينا مشغلي ينقط الخاصة.
في مثل هذه الحالة، لم يكن لدينا المشغل لexponentiation-- جيدا،
لأداء صلاحيات شيء.
ولكن يمكنني، في سويفت، تعريف جديد المشغل أن يفعل بالضبط.
حتى في هذه الحالة هناك حفنة من جملة هنا.
وسوف تسمح لك أن ننظر إليها في المنزل عند النظر في هذا.
ولكننا تحديد هذا أقحم المشغل، **، والتي سوف تسمح لنا،
عن طريق تحديد ما الذي وظيفة ** في الواقع
لا، لقبول اليد اليسرى الجانب الأيمن والجانب اليد،
وبعد ذلك للعودة الأس ذلك الجانب الأيسر إلى الجانب الأيمن.
>> وحتى الآن كل من I المفاجئ خلقت البسط الجديد.
حتى 2 ** 3 يعني 2 إلى قوة ثالثة.
[اعتبارها تهب SOUND] ذلك نفسها ينبغي أن تكون مثل،
OK، المسمار C. انا ذاهب سريعة على طول الطريق.
هذا رائع.
هذا أمر رائع جدا.
>> ورغم أن هذا هو مثال عظيم.
ولكن لم يسبق لي مرة واحدة خارج من هذا المثال في الواقع
تعريف المشغل الخاص بي.
ولكن لا يزال، فإنه يدل على الكثير من قوة سويفت
والسبب في هذا هو في الواقع حقا رائع جدا.
OK، نعم؟
الحضور: إذا كنت تعريف المشغل الخاص بك،
كيف تعرف أنك لا بطريق الخطأ محاولة لخلق هذا المشغل
في مكان ما في C، مثل مخبأة في مكان ما في سويفت،
مثل واحد غامضة أنك قد لا يكون له مثيل من قبل.
>> DAN ارمينداريز: حتى إذا كنت تحاول لتعريف المشغلين الخاصة بك،
هناك خطر من تحديد واحد على المشغل الحالي.
أن يذهب إلى مستوى من التفاصيل التي أنا لا أعتقد أن لدينا الوقت للذهاب أكثر.
ولكن هذا هو الخطر.
وهذا هو في الواقع السبب لماذا لم أكن استخدام رمز الإقحام، التي
عندما نقوم بكتابة خارج السلطة، ونحن عادة استخدام 4 القليل الإقحام 5 أو شيء
من هذا القبيل، فقط عندما نكون Gchatting رفاقا أو أيا كان.
ولكن في هذه الحالة، أن الواقع قد تسبب في الاصطدام.
ولذا فإنني تجنبها لمجرد حدث لي أن أعرف في هذه الحالة
هذا من شأنه أن يسبب هذا التصادم.
>> حسنا.
الآن للأسف، ل الدقائق السبع الأخيرة،
لدي للحفاظ تهب عقولكم قليلا.
لذلك اسمحوا لي أن تظهر لك بعض الأشياء الأخرى كذلك.
>> لقد بينت لكم هذه الفكرة من وجود هذه الوظائف مجهولة،
هذه الإغلاقات التي تسمح لك ل نوع من تمرير ظائف حولها.
يمكنك إعادتها.
يمكنك التلاعب بها.
يمكنك أن تفعل كل أنواع الأشياء المجنونة.
>> ولكن الشيء الآخر أن يحدث أن تكون مفيدة
هو القدرة على، كما عارض العودة إلى تلك الوظائف
في وظيفة، لتمرير وظيفة كمعلمة إلى وظيفة أخرى.
هل يمكن التفكير جيدا ماذا على وجه الأرض أريد أن أفعل شيئا من هذا القبيل؟
>> حسنا، دعنا نقول أن أريد لاتخاذ هذا المشغل بأنني
عملت بجد لإنشاء وتطبيق لمجموعة من أرقام مختلفة
في صفيف.
حتى في هذه الحالة لدي مجموعة من integers-- 1، 4، 7، 2، 5، 10، 56.
وأريد أن يتضاعف كل منهم.
الطريقة التي كنا عادة قيام بذلك هو أن يكتب فقط
بسيط للحلقة بالتكرار على كل منهم
وأداء بعض نوع من عملية مربع عليهم،
إدخال هذه القيم الجديدة في عالم جديد متغير، أو بالأحرى، مجموعة جديدة هنا.
وقيمة الانتاج من النتيجة هي بعد ذلك كل من تلك المصفوفات،
أو بالأحرى كل تلك تربيع العناصر الآن.
>> ويمكن أن تفعل الشيء نفسه شيء لالتكعيب ذلك،
ولكن ناقوس الخطر القليل وينبغي أن يكون الخروج
قائلا أنه ربما هناك بعض الطريقة التي كنا
تكون قادرة على تبسيط هذا قليلا.
في واقع الأمر هناك.
ماذا لو استطعنا خلق وظيفة تسمح لنا
أن يقبل، كما المفترس، وهي وظيفة؟
حتى في هذه الحالة، واتخاذ انظر الآن إلى تلك الحجج.
ونحن في طريقنا لقبول قائمة الزوجي.
وبعد ذلك نحن ذاهبون لقبول وظيفة
في متغير يسمى و الذي يجري لنلقي مزدوجة والعودة مزدوجة.
وإخراج كاملة هذه الوظيفة كامل
دعا معين هو الذهاب الى عودة مجموعة تسمى مزدوجة.
>> ما هذا من شأنه ثم اسمحوا لي أن القيام به هو تكرار عبر تلك القائمة
وتفعل الشيء نفسه، ولكن الآن تطبيق هذه الوظيفة على كل
من القيم الفردية في تلك القائمة.
لذلك أنا لا أعرف حقا ما f غير.
لا يهم بالنسبة لي.
ولكن كما طالما أنه يأخذ في مزدوجة، ينفذ بعض العمليات على ذلك،
ويعود بعد ذلك ضعف، وأود بعد ذلك
قادرة على الخريطة تلك الوظيفة عبر كل عنصر واحد في القائمة.
>> وهذا النوع من البرمجة دعا وظائف الدرجة الأعلى،
أين نحن تمرير وظائف حول كمعلمات
وفعل الأشياء مع وظائف.
انها نوع من مثل أخذ كل هذه الأفكار التي تعلمناها في CS50
ونقلهم النوع من إلى المستوى التالي.
وهذا هو كل الاشياء أسلوب CS51.
ولذا فإننا سوف تذهب في العمق أكثر في الطبقات من هذا القبيل.
>> ولكن هذا هو أيضا المهم هنا لأننا
نرى الكثير من الوظائف التي تستخدم في سويفت
التي أساسا لا هذا، حيث لدينا
بعض الأرقام، وبعض مجموعة من الأرقام.
ونحن في طريقنا لتمرير ذلك مجموعة إلى مخطط لدينا.
ونحن في طريقنا أيضا تمرير بعض من وظيفة، والتي
لقد سبق تعريفها هنا.
انها سوف تكون مربعة.
ونحن في طريقنا لثم تربيع كل تلك الأرقام
وتخزين تلك إلى هذه النتيجة هنا.
>> حتى هذه الحالة التي حددناها لدينا استدعاء الدالة الخاصة معين.
ولكن هذا الشيء بالضبط هو، في الواقع، في صلب سويفت.
وهناك مجموعة متنوعة من وظائف تسمى خريطة.
هناك وظيفة الخريطة، هناك تخفيض وظيفة،
وهناك وظيفة مرشح، التي تطبق أساسا ظائف
إلى كل عنصر واحد في قائمة تعديلها بطريقة أو بأخرى.
>> الجمهور: ذلك منذ كنت تقوم بتحويل البيانات إلى تنسيق آخر
من خلال function--
DAN ارمينداريز: الحق.
نعم، وبالتالي فإن وظيفة اننا قبول
تم تحويل البيانات بطريقة أو بأخرى.
في هذه الحالة، كنا سواء تربيع، أو كنا التكعيب ذلك،
أو حقا، ونحن يمكن أن تؤدي أي عملية على ذلك على الإطلاق.
>> ولكن اسمحوا لي أن تظهر لك، ثم كيف أن هذا وسوف ننظر في الممارسة العملية.
ومرة أخرى، أنا تشغيل قليلا من الوقت. لذلك أنا لست
ستكون قادرا على الذهاب على جميع من شفرة المصدر هنا في التفاصيل.
ولكن أنا أشجعكم على فعل ذلك.
سنقوم الرد في أقرب وقت ممكن بعد هذا الكلام.
>> ولكن إذا كنت نلقي نظرة على هذا، نفترض أن لدينا قائمة من الأرقام،
مجموعة من الأرقام في هذا دعا أرقام متغير.
ثم نريد أن تنفيذ هذه عملية التصفية على تلك الأرقام.
لذلك المرشح هو أعلى وظيفة لكي
تقبل مجموعة وأيضا وظيفة.
وعلى كل عنصر في ذلك مجموعة، فإنه بأداء تلك الوظيفة.
>> إذا كان ذلك ترجع الدالة صحيح، فإنه يحتفظ هذا البند.
إذا كان ذلك ترجع كاذبة، ويلقي بعيدا هذا البند.
وبعد ذلك ترجع قائمة أن يتم بعد ذلك تتكون كل
من تلك العناصر التي تم تصفيتها.
>> حتى في آخر الكلمات، وهذا هو نفس الفكرة، دفتر الدرجات.
قد يكون لدينا مجموعة متنوعة من الصفوف في هذه الأرقام قيمة تسمى.
يمكن أن يكون 100، و 70، و 40 هلم جرا وهكذا دواليك.
ما هذا الفلتر هل هو إشعار أن ذلك هو أن نحوي السكر
لوظيفة غير معروفة.
هذه هي وظيفة مجهول قائلا أن المعلمة أنني قبول
سيكون، إذا كان أكبر من 70
ثم وهذا سيعود صحيح، وهذا يعني أن سيتم الاحتفاظ هذا البند في هذا الفلتر.
لذلك دعونا يكون قليلا أكثر واقعية حول هذا الموضوع.
إذا كان لدي هذه المجموعة من الأرقام ويتألف من 100، 70، و 40،
I أداء هذا المرشح العملية على كل واحد من هؤلاء.
بحيث يمكن للمرء الأول هو هذه القيمة من 100.
100 أكبر من أو يساوي 70 صحيح، التي
يعني أن 100 يتم الاحتفاظ بها في هذه النسخة الجديدة من هذه المجموعة.
70 يمر أيضا.
ولكن 40 لا.
لذلك ما عاد في passingCount هي مجموعة من العناصر 100 و 70--
100، فاصلة، 70.
كانت تلك اثنين فقط البنود التي تم الاحتفاظ بها.
وذلك هو السبب ذهبت بسرعة من خلال الكثير من هذا النوع من الترتيب العالي
الأمور لأن هذا هو أن شائعة الشيء الذي سوف نرى في سويفت جميلة
في كثير من الأحيان، يتم تنفيذ بعض العمليات استخدام هذا بناء الدالة المجهول.
>> هناك بعض الاشياء باردة.
مفاتيح هي في الواقع قوية في سويفت، أعني تماما مثل مجنون، مجنون قوية.
يمكنك استخدام التبديل، و يمكنك تطبيق في الواقع لهم
إلى نطاقات، وهو نوع من الجنون، وتفعل أشياء يتوهم من هذا القبيل.
>> ولكن في الدقائق القليلة الماضية، أريد أن تخطي متقدما بفارق كبير جدا
وتظهر لك مثالا محددا لكيفية نحن يمكن أن تخلق في دائرة الرقابة الداخلية التطبيق باستخدام سويفت.
حتى عندما كنت تفعل هذا، سيكون لديك لاتخاذ
نظرة at-- على أبل الوثائق، فإنها
لديهم الكثير من الدروس الجيدة حقا لإنشاء التطبيق الخاص بك أولا.
وأنا أشجعكم على القيام ذلك لأنهم يأخذك
من خلال كل الخطوات بالضبط ما ل انقر على لإنشاء تطبيق دائرة الرقابة الداخلية.
>> ولكن هنا لدينا هذا التطبيق دائرة الرقابة الداخلية.
وانها التطبيق بسيطة جدا حقا.
إذا قمت بتشغيل هذا، اسمحوا لي أن تظهر لك ما يبدو.
كل ما يفعله هو أنه أساسا تسحب من الإنترنت ملف JSON
بأنني المخزنة على الخادم.
وهذا الملف JSON تعرف الصور التي تسمح
لي ثم دورة من خلال، على بلدي التطبيق، صور من خادم الويب الخاص بي.
>> لذلك ليس لدي هنا getNextImage.
يقوم بتحميل صورة من الانترنت، ثم يعرضها على الشاشة.
>> حتى انها بسيطة جدا.
ولكن الهدف هنا هو لاظهار كيف يمكننا الجمع بين الأشياء
من الأسابيع القليلة الأخيرة من CS50 في تطبيق دائرة الرقابة الداخلية الفعلي.
وبعبارة أخرى، ربما يكون واحدا من الأشياء التي كنت تريد أن تفعل
غير أن يكون هناك تطبيق دائرة الرقابة الداخلية التي يمكن سحب البيانات من الإنترنت
وتظهر للمستخدم بعض المعلومات.
هذا هو تماما نقطة هذا الكود هنا.
>> لذلك هناك الكثير مما يمكن قوله حول كيفية القيام تطوير دائرة الرقابة الداخلية الفعلية.
هناك الكثير من تركيب مجنون أننا لم نشهد حتى الآن تماما
مثل فئة، فئة ما هو في الواقع.
يمكننا تجاهل إلى حد كبير هذا في الوقت الحاضر.
>> ولكن لاحظ أننا قد وردت ضمن هذه مجموعة متنوعة من الأشياء
التي شهدناها بالفعل مثل الوظائف التي لها أسماء محددة.
وعندما نعطي تلك يعمل الأسماء الصحيحة
التي من المتوقع من قبل دائرة الرقابة الداخلية، في الواقع هذا يشعر السحرية قليلا.
ولكن عندما تقوم بإنشاء التطبيق دائرة الرقابة الداخلية، هناك
هي أسماء وظيفة محددة ويطلق عن طريق الهاتف نفسه
كتطبيق يتم تحميل في محاولة لإنشاء عملية في الواقع
يعمل التطبيق الخاص بك.
ذلك مرة أخرى، وهناك الكثير من الأشياء التي أنا يجب أن يتستر على هنا من أجل بالنسبة لنا
للحديث عن هذا على وجه التحديد.
ولكن أنا أشجعكم أن ننظر إلى ربما الندوة دائرة الرقابة الداخلية الأخرى، ولكن أيضا بعض
من الدروس على الانترنت التي لا وظيفة أفضل بكثير من وصف
معلومات محددة.
>> ولكن يمكننا أن نرى زوجين من الأشياء التي هي مثيرة للاهتمام من التعليمات البرمجية هنا.
لاحظ أن لدينا إذا البيانات.
بالمناسبة، واحد مهم شيء إذا كانت تصريحات
غير أن أقواس حول تعبير منطقي اختيارية.
ولكن الأقواس المعقوفة ليست اختيارية، مهما كانت قليلة أو كثيرة الأسطر من التعليمات البرمجية
لديك في حال بيان.
لا يمكن أن يكون لها إذا كانت تصريحات بدون أقواس مجعد في سويفت.
>> وهذا هو، أيضا، من النوع السخيف.
ولكن هناك أسباب تاريخية لذلك.
ومن المفترض أن يخلصك من نفسك.
مثل هذا على سبيل المثال، لا يمكنك القضاء على الأقواس المجعدة حول ذلك
إذا البيان.
تلك هي في الواقع المطلوبة.
لذلك أنا أشجعكم على تفقد هذا.
ولكن هناك واحد أكثر بناء أنني أريد
لتظهر لك حول سويفت أن هو جديد لسويفت 2.0 مقارنة
إلى الإصدارات القديمة من سويفت، وهو يلي.
دعونا نرى أين أنا لم أضع هنا؟
>> حتى في هذه الوظيفة تسمى fetchJSON، هذه الوظيفة
هو المسؤول عن سحب أن JSON ملف من URL، والذي يحدث فقط حتى
أن تكون قيد التشغيل على بلدي IDE CS50.
أنا بدأت للتو أباتشي، وضع ملف JSON لي هناك،
وأنا قادرة بعد ذلك إلى سحب هذا البيانات من الإنترنت باستخدام
هذه الوظيفة وهذا URL، والتي يتم توفيرها عن طريق الهاتف.
لقد وفرت من قبل مكتبة التي تستخدمها عندما
كنت تفعل بعض تطوير التطبيق دائرة الرقابة الداخلية.
>> لاحظ هنا أن هناك هذا غير عادية ودعا بناء بنائي الحراسة.
وحقا كل هذا هو في سويفت هو وسيلة للتحقق من
أن بعض الأشياء لها تم اجتمع قبل
المضي قدما مع بقية من وظيفة.
حيث يمكن أن يكون، وذلك باستخدام هذا النوع اختياري،
ويمكنني أن وجدت URL بواسطة تشغيل هذه الوظيفة NSURL
وتخزينها إلى أن URL ثابت، والتحقق ثم
لمعرفة ما إذا كان URL لا شيء، لأنه كان على وشك العودة نوع اختياري.
وإذا كان صفرا، ثم أود طباعة خطأ ومن ثم العودة.
>> ولكن بدلا من ذلك، يتيح ما الحراسة لنا القيام به هو هذا الشيء جدا،
ولكن تأكد من أنها واقع الحال أن عنوان الموقع
تم تعيين بشكل صحيح من قبل NSURL.
وإذا كان كذلك، فإنه يتخطى أكثر من هذا، وذلك
سوف تسمح لك للمضي قدما رابط بعد أن تم تعريفها بشكل صحيح.
ولكن إذا كان هذا هو الحال الذي لم يتم تعريف رابط صحيح،
إذا هذه الدالة تقوم بإرجاع خطأ أو بعض الشيء الآخر غير متوقع
يحدث في الواقع، هذا الحارس بناء يسمح لنا ثم إخراج هذا الخطأ
والعودة فورا.
نعم فعلا؟
>> الحضور: حتى انها نوع من مثل إذا ثم آخر؟
DAN ارمينداريز: انه نوع من مثل إذا ثم آخر، نعم،
إلا أن هذا العنوان هو ثم تعرف على كل شيء دون هذا.
إذا كان يمر هذا الحارس، ثم والواقع أن تكون مليئة البيانات
وصالحة للاستعمال في ما تبقى من شفرة المصدر في وظيفة الخاص بك.
لذلك أظن أن كنت تريد الذهاب ل تبدأ في رؤية هذا الحارس أيضا.
وأن تضع في اعتبارها ذلك.
>> حتى مجرد النظر في اثنين من الآخر الأشياء، وهذا الحق هنا هو ما،
هل تعتقد، استنادا فقط على ما كنا نتحدث عنها من قبل؟
>> الحضور: أعتقد أنها سوف تعمل في القائمة؟
>> DAN ارمينداريز: هذا هو وثيق.
هذه هي وظيفة أننا حاسمة.
ونحن إدخال تلك الوظيفة كحجة لهذه الوظيفة هنا.
>> الحضور: (غير مسموع) إن لم يكن شيء.
لذلك فمن في القائمة، أليس كذلك؟
>> DAN ارمينداريز: إذا كان الخطأ ليست معدومة، بحيث is-- ذلك لدي لتمرير.
حسنا، دعونا نرى، لا أستطيع حقا انتقل إلى هنا.
الخطأ هو الحجة التي يجري مرت على هذه الوظيفة مجهولة.
هذه هي وظيفة غير معروفة.
ليس له اسم.
ولكن نحن نتقبل هذه الثلاثة الحجج والبيانات وردا على ذلك، والخطأ.
وسوف تعود الفراغ، لذلك انها لن يعود أي شيء.
وهذا هو مضمون من تلك الوظيفة.
ومن ثم يتعين علينا الوصول داخل هذا وظيفة لكل من هذه الحجج.
>> حتى انها زوبعة جولة في اللغة.
ولكن آمل مع ذلك، نأمل كما كنت تأخذ
نظرة على بعض من الدروس محددة لتطوير دائرة الرقابة الداخلية مع سويفت،
خصوصا إذا ذهبت إلى المطور page-- التفاح على شبكة الإنترنت
لديهم الكثير من الخير حقا دروس للحصول على انك بدأته.
ولكن نأمل فقط هذه الساعة من الحديث حول بناء الجملة أعطت نفسها
لديك ما يكفي للبدء في ذلك.
>> وسوف نقوم بنشر كل هذا المصدر كود على موقع الندوة
في أقرب وقت ممكن، وكذلك الشرائح بحيث يكون لديك مرجعا لجميع هؤلاء.
ولكن نتمنى لك التوفيق في مشاريعك.
وشكرا لكم جميعا جزيل الشكر على حضوركم.
>> [تصفيق]