دانستنی‌ها

جاوا ۹ و Jshell (جشنواره عیدتاعید)

 

(این مقاله از طرف جناب آقای محمد حسین ریماز برای جشنواره عید تا عید جاواکاپ ارسال شده است و محتوای این مطلب لزوماً موردتأیید جاواکاپ نیست).

 

ورژن جدید جاوا یعنی جاوا ۹ قرار بود که امسال در کنفرانس ۲۰۱۶ JavaOne معرفی شود و به صورت رسمی منتشر شود اما بخاطر بررسی بیشتر پروژه Jigsaw ،جاوا ۹ باز هم قرار است با تأخیر منتشر شود. اما تقریباً بقیه قابلیت‌های جاوا ۹ نهایی شده‌اند و امکانات متعدد و API های جدیدی به همراه بهینه سازی های فراوانی که در جاوا ۹ اضافه شده‌اند هم‌اکنون به صورت آزمایشی در اختیار علاقه‌مندان قرار گرفته است.۱

Jshell یکی از این امکانات جدید است که در جاوا ۹ معرفی شده و قرار است در این مقاله این ابزار کاربردی جدید را بررسی کنیم و سپس نشان دهیم چگونه می‌توانیم با استفاده از کتابخانه JSoup یک صفحه وب را تحلیل یا اصطلاحاً Scrape کنیم. هرچند که قرار نیست کار با کتابخانه JSoup را به شما نشان دهیم اما برای جذاب‌تر کردن کار و نشان دادن قدرت جدیدی که در اختیار ما قرار گرفته لیست ۲۵۰ فیلم برتر IMDb را استخراج خواهیم کرد.

java9-meta

 

Jshell اصطلاحاً یک REPL است. در‌واقع یک ابزار تحت کنسول است که به طور مداوم و در حلقه ای بی پایان دستورات وارد شده را میخواند و آن‌ها را ارزیابی می‌کند و نتایج این ارزیابی ها را به ما نشان می‌دهد و در نهایت دوباره اینکار را تکرار می کند. چنین مفهومی پیش از این در بسیاری از زبان‌ها مانند Python , Groovy و Scala و دیگر زبان‌ها وجود داشته و این امکان را به توسعه‌دهنده می‌دهد تا بدون باز کردن یک IDE و ساختن پروژه و سختی‌های اینچنینی مستقیماً بتواند کد های خود را در یک محیط تعاملی در درون کنسول بنویسد و با سرعت بیشتری بتواند این کد ها را اجرا و تست کند.

 

برای بهره مندی از این قابلیت جدید شما نیاز به این دارید که JDK 9 را دانلود کنید برای اینکار می‌توانید به سایت۱ OPEN JDK مراجعه کنید و همانطوری که جاوا را قبلاً نصب نموده‌اید، جاوا ۹ را هم به همان شکل نصب کنید.

 

Hello World in Jshell

برای اینکه بتوانیم وارد jShell بشویم باید کامند jshell را در کنسول اجرا کنیم. حال می‌توانیم بدون هیچ دردسری به دنیا سلام کنیم!

به همین سادگی به دنیا سلام کردیم!

 

عبارات کنترلی

برای شروع احتمالاً فیبوناچی نوشتن شروع کلیشه ای خوبی باشد! برای اینکار باید یک آرایه تعریف کنیم:

حال که آرایه را ساخته‌ایم کافیست دو مقدار اولیه آن را مقدار دهی کنیم و به همان روش Dynamic Programming شروع به پر کردن خانه‌های بعدی این آرایه کنیم تا سری فیبوناچی را تشکیل دهیم.

در همینجا دو نکته وجود دارد که دانستنش خالی از لطف نیست:

  • می‌توانید با فشردن کلید TAB دستوری که در حال وارد کردن آن هستید را به صورت خودکار کامل کنید یا لیستی از دستورات ممکن را دریافت کنید.
  • در دستورات یک خطی نیازی به وارد کردن سمیکالن (;) وجود ندارد اما اگر دستورات چند خطی باشد لازم است که سمیکالن گذاشته شود.

 

متد ها

ساختن متد های در Jshell کار چندان سختی نیست و همانگونه که قبلاً متد ها را تعریف می‌کنیم در اینجا نیز به همان شکل اینکار را انجام می دهیم:

حال متد ما به درستی تعریف شده و می‌توانیم از آن استفاده کنیم. با استفاده از دستور methods/ میتوانیم لیستی از متد های تعریف شده را مشاهده کنیم:

پس متد ما به درستی تعریف شده و می‌توانیم آن را به سادگی فراخوانی کنیم:

متد ما به درستی اجرا شد. همانطوری که می‌بینید، در دستورات فوق خروجی متد در جایی ریخته نشده در اینصورت خود Jshell آن را در ۲$ ذخیره کرده و ما هم می‌توانیم به آن دسترسی داشته باشیم. همینطور با استفاده از دستور vars/ می‌توانیم لیستی از متغیر های تعریف شده را ببینیم:

همینطور برای پاک کردن تمام متد ها و متغیر هایی که تعریف شده می‌توانیم از دستور reset/ استفاده کنیم:

 

کلاس‌ها

تعریف کلاس‌ها هم کار آسانی است:

حال می‌توانیم از کلاس تعریف شده شی بسازیم:

امکان استفاده از Abstract Class و اینترفیس و دیگر قابلیت‌های شی گرایی در Jshell هرچند به صورت محدود تر وجود دارد. اما باید توجه کرد که اصولاً در چنین محیط هایی امکان نوشتن برنامه‌های خیلی بزرگ وجود ندارد.

کلاس Student را از کلاس Person ارث بری می کنیم:

کلاس Student نیز به درستی تعریف شده و می‌توانیم از آن استفاده کنیم. برای دیدن لیستی از کلاس‌های تعریف شده می‌توانیم از دستور types/ استفاده کنیم.

ساختن یک شی از Student:

 

Imports و Classpath

برای استفاده از متد ها و کلاس‌های تعریف شده در پکیچ های دیگر نیاز دارید که آن‌ها را import کنید.به صورت پیشفرض تعدادی از این پکیج های پراستفاده تعریف شده اند. می‌توانید لیست پیکج های import شده را با استفاده از دستور imports/ ببینید:

برای اینکه بتوانید از کتابخانه‌های دیگر استفاده کنید باید آدرس فایل jar آن‌ها را به classpath اضافه کنید و پکیج های مربوطه آن‌ها را import کنید. ما میخواهیم از کتابخانه Jsoup برای خزش بر صفحات وب و استخراج محتویات آن‌ها استفاده کنیم. می‌توانید این کتابخانه را از سایت آن دانلود کنید.

برای اضافه کردن به classpath باید از دستور classpath/ استفاده کنید و در ادامه آن آدرس فایل jar را مشخص کنید.

همانطور که می‌بینید ما فایل jsoup-1.9.2.jar را به classpath اضافه کردیم و سعی کردیم که یک کلاس از پکیج org.jsoup.nodes را import کنیم تا از آن استفاده کنیم.

 

۲۵۰ فیلم برتر IMDb 

تا اینجا تمام چیزی که لازم بود از Jshell بدانیم را یاد گرفتیم. حال میخواهیم کمی تفریح کنیم و لیست ۲۵۰ فیلم برتر ۲سایت IMDb را استخراج کنیم و در فایلی ذخیره کنیم تا در ایام فراغتمان این فیلم‌ها را ببینیم.

Jsoup یکی از معروف ترین و قوی‌ترین کتابخانه‌ها برای انجام اینکار است. در این مقاله قرار نیست که این کتابخانه را کامل بررسی کنیم و حتی اجزا آن را معرفی کنیم و کار با آن را یاد بدهیم. برای یادگرفتن آن می‌توانید به مثال‌ها و داکیومنت های موجود در این سایت مراجعه کنید.۳

کار چندان سختی در پیش نداریم، اول از همه نیاز به ساختن یک Document داریم اما قبل از آن باید آن را import کنیم:

 

در اینجا ما از لینک مربوط به ۲۵۰ فیلم برتر یک Document ساختیم. همانطور که مشاهده می‌کنید اطلاعات موجود در آن صفحه به صورت خودکار توسط کتابخانه دانلود می شود.
الان همه چیز برای پارس کردن محتویات این صفحه و استخراج اطلاعات دلخواه ما آماده است. کافی است که ما بر روی آلمان (Element) های این داکیومنت گذر کنیم و از Selector ها و قابلیت‌های کتابخانه برای استخراج اطلاعاتمان استفاده کنیم:

همانطور که دیدید اطلاعات را به سادگی و فقط با یک حلقه ساده استخراج کردیم و کار ما تقریباً تمام شده و تنها کافیست این اطلاعات استخراج شده را در فایلی ذخیره کنیم.

می‌توانیم این اطلاعات را از کنسول کپی کنیم و در یک فایل ذخیره کنیم اما طبیعتاً خیلی بهتر است که مستقیماً این کار را انجام دهیم.

برای اینکار نیاز داریم که این رشته‌ها را در جایی ذخیره کنیم:

حال با استفاده از امکانات موجود در Java NIO می‌توانیم با یک خط به سادگی محتویات این لیست را ذخیره کنیم.

و تمام! از تماشای این فیلم‌ها لذت ببرید!

 

مراجع:

۱- http://openjdk.java.net/projects/jdk9/

۲- http://www.imdb.com/chart/top

۳- https://jsoup.org/cookbook/

 

 

[تعداد: 0    میانگین: 0/5]
نمایش بیشتر

نوشته های مشابه

یک نظر

  1. آقا محمد حسین
    خیلی مقاله ی عالی ای بود
    واقعا لذت بردم.
    قبلا یه بار تو یکی از فایل های ویدئویی جادی کاری شبیه اینو با یه زبون دیگه دیده بودم. خیلی خوبه که حالا تو جاوا هم می تونیم این کارو انجام بدیم.
    من فکر می کردم این حالت کار کردن توی فضای shell مانند، بدون نیاز به این که یک کلاس و یک متد main داشته باشیم و build کنیم ویژگی انحصاری زبون های اسکریپتی مثل پایتون باشه.

    در ضمن من جایی که باید ستاره بدیم و پیدا نمی کنم!! چرا؟؟
    نکنه فقط به پست های خانوم مهرعلیان می شه ستاره داد؟ (D-:)

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا