واحد 2 / 11

تولید کد موبایل با هوش مصنوعی: توسعه کاتلین، سویفت و کراس پلتفرم

سود:

  • به دست آوردن کدی با قابلیت نگهداری و آزمایش با تحمیل معماری مانند MVVM و درخواست لایه به لایه در قطعات کوچک قبل از تولید کد توسط هوش مصنوعی.
  • امکان تشخیص تله های خاص زبان مانند امنیت پوچ و کوروتین در کاتلین، حلقه های اختیاری و حافظه در سوئیفت و بررسی کدهای تولید شده در برابر آنها.
  • امکان تایید مجوزها و پیکربندی به طور جداگانه برای هر پلتفرم در پروژه های کراس پلتفرم (Flutter، React Native)

قلب توسعه موبایل کد است، و اینجاست که ملموس ترین دستاوردهای هوش مصنوعی ظاهر می شود. اما جمله "بگذارید هوش مصنوعی برای من کد بنویسد" به تنهایی یک استراتژی نیست. تولید کد خوب؛ این نیاز به ترکیب زبان مناسب، معماری مناسب، مرزهای مناسب و اعتبارسنجی مناسب دارد. در این بخش، نحوه استفاده کارآمد و ایمن از هوش مصنوعی برای سوئیفت، زبان iOS، کاتلین، زبان اندروید و ابزارهای کراس پلتفرم که بر روی دو پلتفرم با یک پایه کد واحد اجرا می‌شوند را یاد خواهیم گرفت. هدف این است که هوش مصنوعی را نه به عنوان یک «خودکار کد»، بلکه به عنوان یک شتاب دهنده که معماری آن را تعیین می کنید، قرار دهید.

معماری اول، کد دوم

رایج ترین اشتباه این است که مستقیماً بدون طرح معماری از هوش مصنوعی کد بخواهید. این مانند ساختن یک دیوار بدون پی ریزی است. رایج ترین معماری در موبایل MVVM (Model-View-ViewModel - یک الگوی طراحی که داده ها، نمایشگر و منطق نمایشگر را از هم جدا می کند) است. این به این معنی است که view فقط یک view است، منطق و حالت در ViewModel وجود دارد و داده ها در لایه Model هستند. اگر از همان ابتدا این جداسازی را بر هوش مصنوعی تحمیل نکنید، ساختاری غیرقابل آزمایش و نگهداری سخت ایجاد می کند که تمام منطق را در کد صفحه نمایش جا می دهد.

یک جریان تولید کد سالم قدم به قدم:

  1. زمینه را بیان کنید. پلت فرم، زبان، نسخه، معماری، کتابخانه های مورد استفاده.
  2. لایه ها را بخواهید. ابتدا مدل داده، سپس لایه شبکه/داده، سپس ViewModel، آخرین صفحه نمایش است.
  3. قطعات کوچک را بخواهید. یک صفحه یا یک عملکرد؛ این یک فایل غول پیکر 500 خطی نیست.
  4. هر قطعه را تأیید کنید. ساخت، آزمایش، ادغام؛ سپس به مسیر بعدی بروید.
  5. درخواست یک Refactor (بهبود کد). بعد از کد کار، مرحله "make this more readable and testable" است.
نکته: به هوش مصنوعی بگویید "کد را بر اساس MVVM تقسیم کنید: کدام قسمت باید View باشد، کدام بخش باید ViewModel باشد، کدام باید Model باشد، آنها را جداگانه بدهید". این جمله واحد به طور چشمگیری کیفیت معماری کد تولید شده را بهبود می بخشد.

کاتلین و سوئیفت: ملاحظات خاص زبان

کاتلین (اندروید) و سوئیفت (iOS) زبان‌های مدرن و امنی هستند، اما مشکلات متفاوتی دارند. در Kotlin، امنیت تهی (بررسی اینکه آیا یک متغیر می تواند از طریق سیستم نوع "تهی" باشد) گاهی اوقات توسط هوش مصنوعی تایپ می شود. غیر ضروری!! اپراتور (علامتی که در صورت تهی بودن باعث خرابی می شود) ممکن است برنامه را خراب کند. در سوئیفت، چرخه‌های مدیریت اختیاری و حفظ حیاتی هستند. ممکن است هوش مصنوعی اضافه کردن [خود ضعیف] را در بسته شدن فراموش کند و این باعث نشت حافظه می شود.

بنابراین، وقتی زبانی را انتخاب می‌کنید، دستور را بر اساس آن اصلاح کنید: مانند "حفظ ایمنی پوچ در Kotlin، استفاده نکنید!!" یا "جلوگیری از حلقه مرجع قوی در بسته شدن در سوئیفت".

احتیاط: کد ناهمزمان تولید شده توسط هوش مصنوعی به توجه ویژه نیاز دارد. انتخاب محدوده اشتباه در کوروتین های Kotlin یا مسدود کردن رشته اصلی در async/wait در سوئیفت، برنامه را مسدود می کند. هوش مصنوعی این اشتباهات را اغلب انجام می دهد. بدون آزمایش به آن اعتماد نکنید.

توسعه بین پلتفرمی: Flutter و React Native

برای کسانی که می‌خواهند با یک کد واحد به iOS و Android بروند، Flutter (مجموعه ابزار مبتنی بر زبان دارت گوگل) و React Native (راه‌حل مبتنی بر جاوا اسکریپت متا) برجسته هستند. هوش مصنوعی در این محیط‌ها نیز قدرتمند است، اما گاهی اوقات تفاوت‌های پلتفرم (مجوزها، قوانین فروشگاه، رفتار خاص دستگاه) را دور می‌زند. به عنوان مثال، در Flutter، مجوز دوربین در فایل های مختلف در iOS و Android تعریف شده است. هوش مصنوعی فقط می تواند یکی بنویسد. در کدهای کراس پلتفرم، ضروری است که بگوییم «مجوزها و پیکربندی لازم برای هر دو پلتفرم را جداگانه اعطا کنید».

خلاصه انتخابات:

رویکرد

چه زمانی

توجه با هوش مصنوعی

بومی (کاتلین/سوئیفت)

بالاترین عملکرد، ادغام عمیق دستگاه

هر پلت فرم دارای کد جداگانه است. دوبار تایید کنید

بال زدن

یک تیم، رابط کاربری سریع و سازگار

مجوز/تنظیمات خاص پلتفرم را به صورت دستی بررسی کنید

React Native

تیم Web/JS در دسترس است

بخش های پل (پل بومی) را با دقت تست کنید

سه کیف کوچک

مورد 1 - تله کوروتین. یک تیم اندرویدی تابعی را دریافت کرد که لیست محصولات را از هوش مصنوعی بیرون می آورد. کد درخواست شبکه را در موضوع اصلی ارسال می کرد. این مشکل در دستگاه تست ظاهر نشد، اما در شبکه ضعیف، برنامه به مدت 4 ثانیه متوقف شد و یک اخطار ANR (Application Not Responding) داد. زمانی که به هوش مصنوعی گفته شد "کار شبکه را در توزیع کننده IO انجام دهد" رفع شد. درس: همزمانی همیشه کنترل می شود.

مورد 2 - نشت حافظه. یکی از توسعه دهندگان iOS دریافت که پس از 20 بار باز و بسته کردن صفحه نمایش تولید شده توسط هوش مصنوعی، حافظه برنامه از 40 مگابایت به 180 مگابایت افزایش یافته است. دلیل آن این بود که ViewController به دلیل وجود [خود ضعیف] در بسته شدن از حافظه پاک نمی شد. نمودار حافظه Xcode تله را آشکار کرد. درس: نمایه حافظه در توسعه بومی اجباری است.

مورد 3 - تفاوت پلت فرم. یک تیم Flutter کد دسترسی به گالری را از هوش مصنوعی دریافت کرد، این کد روی اندروید کار می کرد اما در iOS خراب شد. دلیل آن این بود که توضیحات مجوز کتابخانه عکس (NSPhotoLibraryUsageDescription) به فایل Info.plist اضافه نشد. هوش مصنوعی فقط سمت اندروید را نوشت. این یک تعمیر 15 دقیقه ای است، اما اگر آن را نمی گرفتیم رد فروشگاه می شد.

اعلان ضعیف / اعلان قوی

اعلان ضعیف: "کد Kotlin را بنویسید که محصولات را از API بیرون می آورد."

اعلان قدرتمند: "تولید کدی برای Android/Kotlin که لیست محصولات را از REST API بیرون می‌کشد.- لایه شبکه با ارتقاء، عملکرد تعلیق- کار شبکه در Dispatchers.IO؛ مسدود کردن رشته اصلی- MVVM: مخزن -> ViewModel -> وضعیت رابط کاربری با StateFlow- حالت‌های خطا: حالت کلاس وجود ندارد، حالت 5x5 جدا xxal نیست. امنیت، با استفاده از !!

دستور قوی مانع از افتادن کد تولید شده در دام موارد قبلی می شود.

قالب های قابل کپی

الگوی تولید لایه ای: "[ویژگی] را برای [پلتفرم/زبان] توسعه دهید. تولید به ترتیب: 1) مدل داده (کلاس داده/ساختار) 2) شبکه یا لایه منبع داده 3) Repository4) ViewModel (مدیریت حالت) 5) صفحه نمایش (UI) هر لایه را جداگانه صادر کنید، یک یادداشت ادغام بین آنها اضافه کنید."

الگوی امنیتی خاص زبان (Kotlin): "این کد Kotlin را مرور کنید: - استفاده از !! و نوع پلتفرم را پاک کنید - محدوده Coroutine و انتخاب توزیع کننده را تأیید کنید - آیا تماس هایی وجود دارد که رشته اصلی را مسدود می کند؟ [کد]"

الگوی امنیتی خاص زبان (Swift): "این کد سوئیفت را مرور کنید: - خطر چرخه حفظ در بسته شدن (خود ضعیف/ناشناس) - استفاده از نیروی اختیاری باز کردن (!) - کارهای سنگینی که باید از رشته اصلی خارج شوند [کد]"

الگوی کنترل بین پلتفرمی: "تمام مجوزها، پیکربندی‌ها و کدهای مخصوص پلتفرم مورد نیاز برای این ویژگی [Flutter/React Native] را در iOS و Android فهرست کنید. ورودی‌های Info.plist و AndroidManifest.xml جداگانه ارائه کنید."

اشتباهات رایج

  • درخواست کد بدون تحمیل معماری. نتیجه: ساختار غیرقابل آزمایشی که همه چیز را روی صفحه نمایش می‌دهد.
  • اعتماد بدون آزمایش کد همزمان. بلوک های نخ اصلی و محدوده نادرست شایع ترین دلایل خرابی هستند.
  • نادیده گرفتن مدیریت حافظه به خصوص نشت در بسته شدن iOS. بدون گرفتن پروفایل قابل توجه نیست.
  • دور زدن تفاوت های پلت فرم در ابزارهای کراس پلتفرم، مجوزها و پیکربندی به طور جداگانه روی دو پلتفرم نوشته می‌شوند.
  • تأیید نشدن نسخه کتابخانه ممکن است هوش مصنوعی API منسوخ Retrofit/Alamofire را پیشنهاد کند. با سند رسمی چک کنید
  • تولید یک فایل غول پیکر. غیرممکن برای نگهداری و تأیید؛ لایه ها را بخواهید

به طور خلاصه

وقتی معماری را مشخص می کنید، تولید کد با هوش مصنوعی قدرتمند است. ابتدا ساختاری مانند MVVM را تحمیل کنید، سپس لایه به لایه درخواست کنید و در قطعات کوچک، هر قطعه را کامپایل و تست کنید. ایمنی پوچ و کوروتین در کاتلین، حلقه های اختیاری و حافظه در سوئیفت نیاز به توجه ویژه دارند. در ابزارهای کراس پلتفرم، مجوزها و پیکربندی به طور جداگانه برای هر پلتفرم نوشته می شود. اعلان قوی، زبان، نسخه، معماری و قوانین امنیتی خاص زبان را از قبل بیان می کند. این از رایج ترین خطاهای تصادف و نشت در تولید جلوگیری می کند.

وظیفه کاربردی

برای صفحه فهرست (به عنوان مثال «فهرست مخاطبین»)، با استفاده از «الگوی ساخت افزودنی» در پلتفرم انتخابی خود (کاتلین یا سوئیفت)، کد را از هوش مصنوعی درخواست کنید. کد تولید شده را به یک پروژه اضافه کنید، آن را کامپایل کنید و این دو بررسی را انجام دهید: (1) آیا فرآیند شبکه/طولانی روی رشته اصلی در حال اجرا است، (2) آیا امنیت null/اختیاری درست است؟ از هوش مصنوعی بخواهید مشکلی را که با یک الگوی امنیتی خاص زبان پیدا کرده اید برطرف کند.

چک لیست

  • [ ] قبل از درخواست کد، معماری (MVVM و غیره) را مشخص کردم
  • [ ] می خواستم لایه به لایه، در قطعات کوچک
  • [ ] من آزمایش کردم که کد همزمان رشته اصلی را مسدود نمی کند
  • [ ] من امنیت null/اختیاری و مدیریت حافظه را بررسی کردم
  • [ ] من مجوزها/تنظیمات دو پلتفرم را به طور جداگانه در یک پروژه چند پلتفرمی تأیید کردم
  • [ ] من نسخه های کتابخانه و امضاهای API را از اسناد رسمی تأیید کردم