انجمن جاواکاپ
2.63K subscribers
825 photos
12 videos
17 files
152 links
کانال رسمی انجمن جاواکاپ

ادمین: @JavaCupAdmin

رسانه‌های جاواکاپ👇
سایت
javacup.ir

اینستاگرام
instagram.com/javacup.ir

لینکدین
shorturl.at/csty2
shorturl.at/atBN7

توییتر
twitter.com/javacupir
Download Telegram
#مقاله
#در_سایت_جاواکاپ_بخوانید

معمولا، عملیات پرتاب و مدیریت استثنا با استفاده از کلاس‌های استثنای خود جاوا امکان‌پذیر است. نوع کلاس استثنا، نوع رخداد پیش‌‌آمده را مشخص می‌کند و پیام داخل استثنا، اطلاعات بیشتری به ما می‌دهد اما می‌توان یک مرحله فراتر رفت و یک کلاس استثنای شخصی‌سازی‌شده (CustomException) طراحی کرد.

مزیت استثنای شخصی این است که به ما ین انعطاف را می‌دهد که بتوانیم متد‌ها و ویژگی‌هایی به آن اضافه کنیم که در استثنا‌های استاندارد وجود ندارند و به این ترتیب، می‌توانیم اطلاعات اضافه‌ای در آن ذخیره کنیم.

در این مقاله، توصیه‌ها و به‌روش‌های مفید در طراحی و استفاده از استثنا‌های شخصی را با شما به اشتراک می‌گذاریم.

با عمل به این توصیه‌ها، کد و API شما بهتر فهمیده می‌شود و میزان داکیومنت موردنیاز هم کمتر می‌شود.
اثر این کار، در زمانی که برنامه‌نویس‌ جدید به تیم اضافه‌ شود و بخواهد از APIهای شما استفاده کند، محسوس‌تر می‌شود.
javacup.ir/exception-class-best-practice

@JavaCupIR
#مقاله
#در_سایت_جاواکاپ_بخوانید

در این مقاله به مفهوم ارجاع ضعیف (weak reference) در جاوا می‌پردازیم.

همانطور که می‌دانید، چهار نوع ارجاع متفاوت در جاوا وجود دارد:

1- ارجاع قوی (Strong reference)
2- ارجاع ضعیف (Weak reference)
3- ارجاع نرم (Soft reference)
4- ارجاع شبح (Phantom reference)

ارجاع ضعیف، ارتباط تنگاتنگی با زباله‌روب جاوا دارد. عملیات زباله‌روبی (Garbage collection) به بیان ساده، عملیات آزادسازی خودکار حافظه‌ای است که به آن هیچ ارجاعی وجود ندارد.

ارجاع ضعیف، ارجاعی است که به اندازه کافی قوی نیست تا باعث شود شی‌ای که به آن اشاره می‌کند، در حافظه باقی بماند. به بیان دیگر، تصمیم اینکه شی مورد بحث قابل زباله‌روبی هست یا نه را به خود زباله‌روب واگذار می‌کنند.

جاوا به طور پیش‌فرض، ارجاع‌ها را به صورت قوی (همان ارجاع معمولی که تا کنون از آن استفاده می‌کردیم) تعریف می‌کند. برای داشتن یک ارجاع به صورت ضعیف،‌ باید این موضوع را موقع تعریف کردن، مشخص کنیم.

https://javacup.ir/weak-reference/

روزبه شریف‌نسب
@JavaCupIR
#در_سایت_جاواکاپ_بخوانید #مقاله

گشتی در بایت‌کد جاوا

اگر ربط عنوان و تصویر را نمی‌دانید، این مقاله را مطالعه کنید.

از ابتدای یادگیری جاوا آموخته‌ایم که سورس‌کد جاوا را در ادیتور به صورت فایل متنی می‌نویسیم و به وسیله کامپایلر جاوا، تبدیل به بایت‌کد می‌‌کنیم که یک نوع کد میانی مخصوص زبان‌های جاوایی است و در فایل class. ذخیره می‌شود. همچنین می‌دانیم که این زبان میانی مستقل از سکو است و روی هر ماشینی که ماشین مجازی جاوا (JVM) روی آن نصب باشد، قابل اجراست.

جالب است بدانید که امکان ساخت یک ماشین که به صورت بومی، بایت‌کد جاوا را اجرا کند هم وجود دارد. حتی مواردی هم به مرحله تولید و فروش رسیده‌اند (به ویکیپدیا مراجعه کنید). یک مثال جالب از این دسته، Jazelle است، قسمتی از پردازنده‌های ARM که (بخشی از) مجموعه دستورات بایت‌کد جاوا را اجرا می‌کرد.

حالا در این مقاله می‌خواهیم ساختار بایت‌کدها را بررسی کنیم، ببینیم به چه شکل ذخیره شده‌اند، مجموعه دستوراتشان چگونه است و چگونه اجرا می‌شوند و در آخر هم با ابزار‌ی آشنا می‌شویم که می‌تواند این بایت‌کدها را بسازد یا تغییر دهد.
javacup.ir/bytecode
روزبه شریف‌نسب
@JavaCupIR
#مقاله
#در_سایت_جاواکاپ_بخوانید

روش دستوری (imperative) و روش اعلانی (declarative) دو روش کاملا متفاوت برای توصیف الگوریتم هستند. در دهه‌های ۸۰ و ۹۰ میلادی تصور می‌شد این طرز فکرها، کلا جدا از هم و تطبیق‌ناپذیر هستند. به طوری که ما شاهد کشمکش‌هایی هم بین برنامه‌نویسی شی‌گرا و فانکشنال بودیم. Smalltalk و ++C قهرمانان شی‌گرا، و هسکل قهرمان تابعی بود.
بعدها ++C شی‌گرایی خالص را کنار گذاشت و خود را به عنوان یک زبان چندپارادایمی مطرح کرد. از آن به بعد جاوا به عنوان سردمدار زبان‌های شی‌گرا ادامه‌داد تا نهایتا با جاوا ۸، این زبان هم تبدیل به یک زبان چندپارادایمی شد.

مطالعه کامل مقاله:
javacup.ir/multiparadigm-jvm/

روزبه شریف‌نسب
@JavaCupIR
#مقاله
#در_سایت_جاواکاپ_بخوانید
در یکی از مقاله‌هایی که اخیرا در جاواکاپ منتشر شد، در مورد چندپارادایمی بودن ماشین مجازی جاوا صحبت کردیم، به طور خلاصه گفته شد که به خاطر کامپایل شدن تمام زبان‌های اسکالا، Groovy، کلوژر و کاتلین به بایت‌کد و اجرا توسط ماشین مجازی جاوا، این امکان وجود دارد که برای قسمت‌های مختلف فضای مسئله خود، از زبان‌های مختلف استفاده کنیم. یکی از مطرح‌ترین و پرکاربردترین زبان‌های بر پایه ماشین مجازی جاوا، اسکالا است. در این مقاله، با اسکالا آشنا شده و مزایا و معایب آن را بررسی می‌کنیم.

اسکالا به عنوان یک زبان بر پایه ماشین مجازی جاوا و نوع داده ایستا در ژانویه سال ۲۰۰۴ میلادی توسط مارتین اردرسکی معرفی شد. اسکالا هم برنامه‌نویسی شی‌گرا و هم تابعی را پشتیبانی می‌کند. از معروف‌ترین پروژه‌های توسعه‌ داده‌شده با این زبان می‌توان به آپاچی اسپارک، آپاچی کافکا و آپاچی فلینک اشاره کرد. در لیست محبوبیت زبان‌ها هم اسکالا جایگاه خوبی دارد. (رتبه ۱۳ ام)

برای مطالعه کامل این مقاله و آشنایی با ویژگی‌های اصلی اسکالا، به سایت جاواکاپ رجوع کنید:
https://javacup.ir/scala-tutor

روزبه شریف‌نسب
@JavaCupIR
#مقاله
#در_سایت_جاواکاپ_بخوانید
در آموزش‌های جاوا دیدیم که API جدید java NIO به جاوا اضافه شده و با قابلیت‌هایش می‌تواند به‌ جای API قدیمی java IO استفاده شود. حالا سوالی که پیش می‌آید این است که چه زمانی باید از java NIO استفاده شود و چه زمانی بهتر است همچنان از API قدیمی java IO استفاده کنیم؟

در این مقاله، تلاش شده تفاوت‌های بین این دو API شفاف‌سازی شوو و در آخر بتوانیم نتیجه بگیریم که از هر کدام کجا استفاده کنیم و اینکه این انتخاب چگونه طراحی کد ما را دست‌خوش تغییر می‌کند.

برای مطالعه این مقاله، به این آدرس مراجعه کنید:
https://javacup.ir/io-vs-nio/
روزبه شریف‌نسب
@JavaCupIR
#مقاله
#در_سایت_جاواکاپ_بخوانید

شما با کلوژر آشنایی دارید؟
در این مقاله، آقای زیمونسکی به زبان خیلی ساده و ابتدایی، سینتکس زبان جاوا و کلوژر رو با هم مقایسه می‌کنن.
به طوری که در انتهای مقاله می‌تونیم یه مساله کوچیک رو با زبان کلوژر حل کنیم.

در نهایت هم اگر علاقه‌مند شدید کلوژر یاد بگیرید، دو تا ویدیوی آموزشی خوب بهتون معرفی شده.
javacup.ir/clojure-basics

روزبه شریف‌نسب
@JavaCupIR
#مقاله #در_سایت_جاواکاپ_بخوانید

کتاب‌خانه Apache PDFBox یکی از کتاب‌خانه‌های متن‌باز Apache است که با جاوا نوشته شده و برای ساخت یا ویرایش فایل‌های pdf مورد استفاده قرار می‌گیرد. با این کتابخانه می‌توان کارهایی مثل افزودن و استخراج متن و عکس، ویرایش اطلاعات فایل، افزودن کامنت، هایلایت کردن متن، وصل کردن چند فایل بهم، افزودن یا حذف مجوزها مثل مجوز چاپ کردن فایل، افزودن کد جاوااسکریپت، رمزگذاری فایل، افزودن امضا، تبدیل فایل به عکس و HTML و… را انجام داد.

در واقع PDFBox از ۴ جز اصلی تشکیل ‌شده‌ است که هر کدام در یک فایل jar جداگانه قرار دارند: PDFBox و FontBox و XmpBox و Preflight.

در این بین، مهم‌ترین آن‌ها PDFBox است که تمام کلاس‌های کاربردی برای پردازش pdf در آن قرار دارند.

با FontBox اجازه استفاده از فونت‌های مختلف را دارید.

از XmpBox برای کنترل متادیتای XMP فایل‌ها استفاده می‌شود.

با کلاس‌های Preflight می‌شود چک کرد که آیا فایل pdf از استاندارد PDF/A پیروی می‌کند یا خیر.

در این مقاله با برخی از کلاس‌های این کتاب‌خانه آشنا می‌شویم:

javacup.ir/apache_pdfbox_tutorial/

#امید_نژادعباسی
@JavaCupIR
#مقاله #در_سایت_جاواکاپ_بخوانید

در این مقاله با قابلیت جدید Sealed Class یا کلاس مهر و مو‌م‌شده در جاوا ۱۵ آشنا می‌شویم.

کلاس‌های مهر و موم‌شده مهم‌ترین تغییر جاوا ۱۵ بوده و امکانات شی‌گرایی جاوا را بسیار بهتر کرده‌ است. با اضافه شدن این امکان به جرأت می‌توان گفت جاوا شی‌گراترین زبان برنامه‌نویسی موجود است. برای تکمیل این ویژگی، قرار است امکان switch زدن روی نوع کلاس اشیا هم به جاوا اضافه شود که البته قول این ویژگی و pattern matching مدت زیادی است که به برنامه‌نویس‌ها داده شده ولی هنوز به صورت رسمی به جاوا اضافه نشده‌اند.

همان‌طور که می‌دانید، هدف اصلی از وراثت در جاوا، استفاده دوباره از کد (code reuse) است. با این امکان، کلاس‌های متعدد می‌توانند از یک کلاس دیگر ارث‌بری کنند و از متد‌های از قبل تعریف‌شده آن برای خودشان استفاده کنند یا آن‌‌ها را گسترش دهند. هدف مهم دیگر این است که مدل و سلسله‌مراتبی برای درک بهتر پروژه طراحی شود.

با کمک «کلاس‌های مهر و موم‌شده»، با محدود کردن این‌که چه کلاسی می‌تواند از کلاس ما ارث‌بری کند، کارمان راحت‌تر شده است.
javacup.ir/sealed-classes/


#امید_نژادعباسی
@JavaCupIR
#مقاله #در_سایت_جاواکاپ_بخوانید

یکی از سخت‌ترین بخش‌های توسعه نرم‌افزار، این است که بدانیم در هر زمانی روی چه کاری باید وقت گذاشت. همه ما عاشق کد زدن و ساخت چیزهای جدید هستیم. اما با توجه به اینکه توسعه‌دهنده‌ها اصولا گران و کمیاب هستند، استفاده درست از زمانشان، به یکی از بزرگترین چالش‌های این کار تبدیل می‌شود.

بهینه‌سازی زودهنگام (Premature optimization)، به معنای صرف وقت بیش از حد روی چیزیست که ممکن است اصلا نیاز نشود.

بسیاری از تیم‌های توسعه خیلی زود درگیر کارهای بهینه‌سازی و مقیاس‌پذیری پروژه می‌شوند در حالی که هنوز از عملکرد صحیح محصولشان مطمئن نیستند.

بهینه‌سازی زودهنگام چیزیست که باید همیشه آن را گوشه ذهن داشته باشید و چیزیست که باید همیشه در کارهای روزانه‌تان از آن دوری کنید.
javacup.ir/premature-optimizations

#روزبه_شریف_نسب
@JavaCupIR
#مقاله
#در_سایت_جاواکاپ_بخوانید

به عنوان توسعه‌دهنده و معمار نرم‌افزار، دائما در حال فراخوانی و تجمیع سرویس‌های مختلف به وسیله APIهای REST هستیم. گاهی اوقات به دلیل طراحی ضعیف یا داکیومنت‌های کم، استفاده از این APIها بسیار سخت است. این موضوع باعث می‌شود تا برنامه‌نویسان قادر به استفاده از سرویس‌های موجود نباشند و مجبور شوند همان کارکرد را از اول پیاده‌سازی کنند.

در این مقاله، بحث‌مان را با توضیح REST و اینکه منظور از «طراحی APIهای REST» چیست، شروع می‌کنیم.

سپس ۱۲ نکته مفید برای طراحی بهتر APIهای REST را با هم مرور می‌کنیم.

javacup.ir/rest-api-best-pratice

#روزبه_شریف‌_نسب
@JavaCupIR
#مقاله
#در_سایت_جاواکاپ_بخوانید

چرا کاتلین؟
بخش اول

کاتلین در سال ۲۰۱۱ معرفی شد ولی اولین نسخه پایدار آن (نسخه ۱.۰) سال ۲۰۱۶ منتشر شد. کاتلین زبان متن‌باز و رایگانی است که توسط مهندسان JetBrains توسعه یافته‌ است.
در این سال‌ها توجهات بسیاری را جلب کرده است. مخصوصا از زمانی که گوگل اعلام کرد می‌توان از کاتلین برای توسعه برنامه‌های اندروید استفاده کرد و حتی زبان توصیه‌شده برای اندروید را کاتلین معرفی کرد.

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

کاتلین می‌تواند در پلتفرم‌های گوناگونی از جمله JVM اجرا شود. همانطور که از زبان‌های بر پایه JVM انتظار داریم، قابلیت همکاری بسیار خوبی با جاوا دارد.

در این مقاله، ۸ قابلیت جذابی که فکر می‌کنیم برای برنامه‌نویسان جاوا جالب خواهد بود معرفی شده‌اند.

در بخش اول مقاله، دو مورد از این هشت مورد را با هم بررسی می‌کنیم.
۱- سینتکس تمیز و جمع و جور
۲- داشتن (تقریبا) یک تایپ‌سیستم

javacup.ir/why-kotlin-1
روزبه شریف‌نسب
@JavaCupIR
#مقاله

ایجاد آشوب یا به‌انتظار آشوب؟

معلوم نیست کی و کجا، اما بالاخره شرایط بحرانی از راه می‌رسد و برای غلبه بر آن، آماده بودن شرط اصلی‌ست.

مجتبی یوسفی، با معرفی مهندسی آشوب در این مطلب، توضیح می‌دهد چگونه برای مدیریت شرایط غیر نرمال، دست پیش را بگیریم که پس نیفتیم.

🔗 لینک مقاله

📌 شما هم دانش و تجربه‌تان را از طریق جاواکاپ با دیگران به اشتراک بگذارید.

📌 از این پس، در کانال تلگرامی جاواکاپ مقالات مرتبط فارسی که لزوما در سایت جاواکاپ منتشر نشده‌اند را هم پروموت خواهیم کرد.
@JavaCupIR
#مقاله

راه‌اندازی سرور CI: کوزه‌گری که از کوزه شکسته‌ آب می‌خورد!

در این مطلب، عمران باتمان‌غلیچ از زاویه نگاه کیفیت به سراغ گوشه‌ای از گودِ توسعه‌ی محصول می‌رود که با اینکه داعیه‌دار ارتقای کیفیت محصولات نرم‌افزاری‌ست، اما عمدتا خودش کیفیت بالایی ندارد: سرور CI

🔗 لینک مقاله

📌 شما هم دانش و تجربه‌تان را از طریق جاواکاپ با دیگران به اشتراک بگذارید.

@JavaCupIR
#مقاله
#در_سایت_جاواکاپ_بخوانید

همه‌ی ما با برنامه‌نویسی شی‌گرا آشنا هستیم. کم و بیش با Aspect Oriented Programming نیز آشنایی داریم. اخیرا Reactive Programming فراگیرتر شده‌است. ولی خیلی از ما چیز زیادی راجع به پارادایم Actor Model نمی‌دانیم.

مهندس پیشوایی در این مقاله برخی از خواص برنامه‌نویسی با مدل اکتور را توضیح داده‌اند. با این امید که توجه بیشتری به این پارادایم مفید و پرکاربرد در ایران ایجاد شود.

🔗لینک مقاله

@JavaCupIR
#مقاله

آنچه یک توسعه‌دهنده جاوا باید در مورد Garbage Collector بداند
قسمت اول

یکی از چیزهایی که برنامه‌نویس‌‌های جاوا معمولا اون رو دست کم می‌گیرن، Garbage Collector یا زباله‌روبه.
در این مطلب، تجربه‌‌ یک توسعه‌دهنده ارشد جاوا از دست‌وپنجه نرم کردن با زباله‌روب و تنظیماتش؛ و دانسته‌‌های به‌روزش رو به صورت کاربردی می‌خونیم.

🔗 لینک مقاله

📌 شما هم دانش و تجربه‌تان را از طریق جاواکاپ با دیگران به اشتراک بگذارید.

@JavaCupIR
#مقاله
#در_سایت_جاواکاپ_بخوانید

با وجود اینکه به طور کلی جاوا زبان کندی نیست، اما مدت زمان راه‌اندازی برنامه‌ها راضی‌کننده نیست!

زمان راه‌اندازی برنامه‌ها در پروژه‌های کوچک یا برنامه‌های کاربردی مشکل قابل‌توجهی به حساب نمی‌آید، اما در پروژه‌های بزرگ‌‌تر که classpath بزرگی دارند، در زمان توسعه به مسئله‌ای مهم تبدیل می‌شود. به طور خاص، در برنامه‌های Spring Boot با اینکه روند توسعه سریعی دارند،‌ اما با اضافه کردن تعدادی وابستگی‌، مدت زمان راه‌اندازی برنامه طولانی‌ می‌شود.

در این مقاله به شما چند آرگومان ماشین مجازی جاوا معرفی می‌شود که با کمک آن‌ها می‌توان مدت زمان راه‌اندازی را کمتر کرد.

هم‌چنین چند نکته را با هم مرور می‌کنیم که در نظر گرفتن آن‌ها در زمان توسعه‌ یک برنامه‌ Spring، روی مدت زمان راه‌اندازی برنامه تاثیر چشم‌گیری دارد.

🔗 javacup.ir/improve-startup-time
روزبه شریف‌نسب
@JavaCupIR
#مقاله
#در_سایت_جاواکاپ_بخوانید

در این مقاله با پیاده‌سازی دو روش Blocking I/O و Non-Blocking I/O در زبان جاوا آشنا می‌شوید.

🔗 blocking-io vs non-blocking-io
روزبه شریف‌نسب

@JavaCupIR