برنامه نویسی با جاوا در اندروید استودیو
معرفی ورژن های قابل تعریف جاوا برای اندروید در حین کار با اندروید استودیو بهمراه بررسی عملکرد سینتکس جاوا در کدنویسی اندروید استودیو و معرفی سینتکس های قابل اجرا و غیرقابل اجرا
فهرست مطالب آموزش
جاوا در اپ نویسی با اندروید استودیو
کامپایلر اندروید کد جاوا شما رو به کدبایتی برای ران تایم اندروید تبدیل میکنه؛ همه کاری که ما در اندروید نویسی انجام میدیم همین هست، ولی اجازه بدید یکم بیشتر براتون توضیحش بدم.
بد نیست بدونید که آندروید یک نسخه خاص از جاوا رو پشتیبانی می کنه؛ که به طور کامل با هیچ نسخه خاصی از جاوای اوراکل یکی نیست، و صرفاً برایِ اندروید سفارشی شده.
درواقع جاوای اندروید در وهله اول از syntax و API های جاوای 5 و 6 استفاده میکنه. (اینجا بد نیست بدونید Syntax یا دستور گرامری هر زبان در حقیقت مربوط به ساختار و قوانین نوشتن دستورات اون زبان میشه.)، همچنین جاوای اندروید از تعدادی قوانین سینتکس پیشرفته شده در جاوای 7 نیز پشتیبانی میکنه اما نه از همشون.
ویژگی هایی هم هست که در جاوای 8 معرفی شدند، که باید بگم در دسترس جاوای اندروید نیستند؛ مثل لامبادا اکسپرشن ها، اینم بدونید که لامبدا اکسپرشن امکان مهم و جدیدی هست، که در جاوا ۸ اضافه شد؛ که قبلا در C# مطرح شده بود. توسط لامبدا می توانیم توابعی رو بصورت بی نام به همراه بدنه اونها تعریف کنیم که مزایای گوناگونی از قبیل مختصر کردن کد، کم کردن تعداد فایل های .java پروژه را دارا هستند.
من الان میخام برای روشن تر شدن مفاهیم جاوا یکسری مقدمات سینتکس جاوا رو براتون شرح بدم و با این سناریو بکارم ادامه بدم؛ اینجا این مهم رو یادآوری می کنم که شما بکرات در این دوره آموزشی به این مفاهیم برخورد خواهید کرد: خب؛اگه به یک برنامه جاوا توجه کنید متوجه می شوید که بصورت مجموعه ای از اشیاء تعریف شده که این اشیاء ازطریق فراخوانی متد ها از قابلیت های همدیگر استفاده می کنند. دراین بخش نگاهی اجمالی میندازیم به ساختار برنامه های جاوا، پس به این مفاهیم که شامل یک شیء یک کلاس و یک متد و درنهایت یک متغیر در کدنویسیِ جاوا هستند، خیلی دقت کنید.
شیء (object):
اول میخام شیء رو در کدهای جاوا بهتون معرفی کنم: اشیاء دارای حالت و رفتار می باشند. بعنوان مثال یک ماشین از نظر حالت دارای خصوصیاتی مانند رنگ، مدل، نام و … هست و از نظر رفتاری می تونیم به حرکت کردن، ترمز کردن و .. اشاره کنیم. یک شیء در واقع یک تعریف از یک کلاس هست.
کلاس (class):
خب؛ حالا که فهمیدید شیء چی هست بذارید به بررسی یک کلاس بپردازیم: کلاس یک مدل کلی از یک شی خاص هست که اشیایی که از اون ساخته می شوند، خصوصیات و رفتار خودشون رو أزش می گیرند، در کل اینطور میشه گفت که این کلاس ها هستند که شکل و ماهیت شیء ها رو بیان می کنند. هر کلاسی الگویی برای یک شیء ِ و هر شیء نمونه ای از کلاس هست.
متد (method):
و اما ساختار متد: در واقع رفتار شی رو متد میگیم . یک کلاس می تونه یک یا چند متد داشته باشn. منطق برنامه در متد نوشته می شود؛ یعنی تمام عملیات اجرایی توی متدها نوشته می شود، مثل دستکاری داده ها یا هر حرکت دیگه.
رشته(string):
و در نهایت اگر بخام در موردِ متغیرهای نمونه توضیح بدم باید بگم که: هر شیء دارای یک مجموعه یکتا از متغیرهای نمونه هست و حالات یک شیء توسط مقدار دهی به این متغییرها تعیین می شوند.
عملکرد سینتکس جاوا در جاوای اندروید
جاوا 7 از syntax جدیدی پشتیبانی می کند، که واقعاً می تواند سرعت کد نوشتن تون رو بالا ببرد. و این چیزی هست که در اندروید 6 ساپورت می شود.
همچنین اپراتور دیاموند (diamond) به شما این اجازه رو میدهأ که در واقع وقتی یک داده رو بصورت عمومی تعریف می کنید، می تونید از اون بدون تعریف مجدد نوع داده در قسمت های دیگه استفاده کنید.
به طوریکه قبل از جاوای 7 باید در سازنده هم یبار دیگه اون متغیر مورد نیاز رو اعلان می کردید. ولی در جاوا 7 دیگه نیازی به این کار نیست.
همچنین می تونید با استفاده از دستور سوییچ (switch) یک دستور شرطی چند قسمتی داشته باشید، بطوریکه شروط رو به صورت دستی در قسمت های مختلف می گیره و متناسب با هر قسمت دستور مربوطه رو اجرا میکنه.
از این دستور شرطی به این شکل همراه با آندراسکور هم استفاده میشه تا خوانایی و فهم کد بهتر بشه.
سینتکس های غیرقابل اجرا جاوا در جاوای اندروید
این نسخه از جاوا در اندروید همه ی کارایی های جاوای 7 رو پشتیبانی نمیکنه؛ مثلاً بندِ try-with-resources که در جاوا 7 برایِ بستنِ اتوماتیکِ آبجکت ها تعریف شده و در یک واسط بنامِ closeable تعریف میشه؛ ولی میبینیم فقط از اندرویدِ 4.4 یعنی Api 19 به بعد ساپورت می شود.
بنابراین باید در انتخاب مینیمم SDK توجه داشته باشید. گاهی ممکن هست یک SDK قددیمی تر رو مینیمم قرار بدیم، ولی اون قادر به اجرای قوانین و سینتکس های خاصی از برنامه ی ما نباشه. پس همیشه این نکات رو در تعیین مینیمم SDK در نظر بگیرید.
و یا تفسیر SafeVarargs که این هم در جاوا 7 تعریف شده؛ ولی در اندروید ساپورت نمی شود، برایِ اطلاعاتِ بیشتر بد نیست بدونید از این تفسیر برایِ متوقف کردنِ بعضی از خطاهایِ سیستمی استفاده میشه که بطورِ بالقوه پارامترهایی ناامن محسوب می شوند. خب ؛پس این دوتا قابلیت که گفتم دو تا از ویژگی های نه خیلی پرطرفدارِ جاوا 7 هستند که در اندروید پشتیبانی نمی شوند.
SDK اندروید بسیاری از کتابخانه های جاوا که من-بعد؛ ما بهشون پکیج میگیم رو شامل می شود.
به عنوان مثال کتابخانه java.lang برای انواع داده های استاندارد، کتابخانه ی java.io و NIO برای ورودی/خروجی، کتابخانه java.math برای عملیات ریاضی و محاسباتی و کتابخانه های دیگه. اما باز هم نمی تونیم فرض کنیم که همه چیز در ران تایم جاوا اوراکل برای اندروید هم؛ قابلیتِ پیاده سازی رو داره، یعنی نمی تونیم از هر پکیجی که برایِ جاوا 7 تعریف شده در اندروید استفاده کنیم. باید به هلپ نرم افزار برید و documentation یا اسناد موجود رو چک کنید که کدوم پکیج از جاوا 7 در اندروید قابل پشتیبانی هست و کدام حذف شده و وجود نداره.
همچنین بسیاری از کتابخانه های جاوا در SDK هستند که خاص و منحصر به فرد اندروید هستند.
این کتابخانه ها با کلمه “اندروید (android)” با حروف کوچک شروع می شوند، و بقیه آن با نام هایی که توصیف کننده ی اون عمل خاص هستند کامل می شوند. پس یک کتابخانه برای مدیریت پایگاه داده با نامِ android.database وجود داره، یکی برای چیزهای بصری با نامِ android.widgets وجود داره، یکی برای گرافیک با نامِ android.graphics وجود داره و غیره و غیره. دوباره، در documentation یا هلپ نرم افزار، برای چک کردن کامل بودن لیست پکیج هایِ موجود در SDK یک نگاهی بیندازید.
و این رو هم بهتون بگم که شما می تونید منابع API رو در صفحه وب پیجی که در تصویر زیر سفارشی شده، ببینید.
وقتی که کد جاواتون رو در نرم افزار اندروید استودیو کامپایل می کنید، یک تعداد مراحل جهت کامپایل کد شما طی می شود.
در مرحله اول کدی که نوشتید یعنی همون Source code تون در جاوا به همراه کلاس هایی که از پیش کامپایل شدن، یعنی Library code هاتون و همچنین کتابخانه های شخصی و سفارشی شده توسط کامپایلر جاوا یا همون Java C کامپایل می شوند. به همین دلیل شما به کیت کامل توسعه جاوا و یا Java development kit یا به اختصار JDK نیاز دارید که روی سیستم توسعتون نصب کنید.
در واقع اونها یک مجموعه از کدهای جاوا هستند، و فایل هایی با پسوند دات class دارند.
سپس یک مرحله اختیاری وجود دارد.
این مجموعه کدهای جاوا می توانند توسط یک ابزار به نام PROGUARD پردازش شوند. این ابزار به طور پیش فرض در پروژه های جدید اندروید که در Android Studio ایجاد می کنید غیر فعال هستند،
اما در صورتی که فعالش کنید، باعث می شود توزیع پکیج برنامه تون و همینطور کامپایل مجددش روی دستگاه کاربران دچار مشکل شود.
گام بعدی این هست که اون کدهای جاوا در چیزی با نام DEX راه اندازی شوند.
DEX یک فرمت خاص هست که برای اندروید بهینه سازی شده،
و می تواند توسط هر دو ران تایم دالویک که قدیمی تر هست، و ران تایم جدیدتر ART اجرا شود. می شود گفت ماشین مجازی دالویک وظیفه بهینه سازی کدها برای اجرا بر روی موبایل رو دارد؛ و از اندروید 5 به بعد ART جایگزین دالویک شد. فایل های DEX در حقیقت فایل هایی هستند که در پکیج برنامتون توزیع می کنید.
ران تایم دستگاه کاربری که برنامه ی شما رو گرفته این فایل های DEX رو میخونه و بعضی از اونها رو مجدد روی دستگاهش کامپایل می کند. فرمت این فایل ها به گونه ای طراحی شده که این کامپایل و اجرای برنامه در حد ممکن سریع باشد.
برای اندروید های زیر اندروید 5 که از ماشین مجازی دالویک استفاده می کنند، این مرحله از کار در زمان اجرای برنامه انجام میشه؛ و از معماری just-in-time برای کامپایل استفاده می شود.
ولی در اندروید های 5 به بالا که از ART استفاده می کنند، این مرحله در زمان نصب برنامه انجام می شود. بنابراین وقتی برنامه اجرا می شود کاربر می تواند خیلی سریع به برنامه دسترسی داشته باشد و أزش استفاده کند. خب تا اینجا گفتیم که چطوری کد جاوایی که نوشتید به چیزی قابل اجرا برای اندروید تبدیل می شود. در واقع کار از یک کد جاوای خام شروع می شود و بعد از گذراندن یکسری مراحل به یک چیزی که برای ران تایم اندروید قابل خواندن و اجرا شدن باشد تبدیل می شود.