ورود

View Full Version : مقاله: سلام به جاوا به زبان Groovy:آشنایی با زبان برنامه نویسی



mazdadoost
سه شنبه 11 تیر 1387, 14:31 عصر
سلام به جاوا به زبان Groovy:آشنایی با زبان برنامه نویسی Groovy
مقدمه:
از مدت ها پیش که برای جاوا به زبان جاوا کد می نوشتم , همیشه دوست داشتم کار ها کمی از اون چه که هست ساده تر بشه.مثلا کار با Generics ها!یا اینکه امکاناتی که در C و یا ++C مثل
تحریف عملکرد ها رو برای کلاس هام داشته باشم.

اما خوب از طرفی هم خوب که فکر میکردم متوجه میشدم پا گذاشتن چیز هایی که جاوا (برای عملی کردن فلسفش که مهمترینش سادگیشه ) در زبان هایی مثل ++C هست زبان رو پیچیده میکنه.و البته این فکر از مدت ها قبل در ذهن سازندگان جاوا بود!

پس باید چه کار کرد؟با اومدن زبان های اسکریپتی مثل PHP و Python و بعد ها زبان های اسکریپتی پویا یا دینامیک(دینامیک معنی گسترده ای داره به شکل خلاصه میشه گفت توانایی گسترش Syntax و یا پشتیبانی یه فناوری در سطح زبان نه API و یا Typing خودکار!)مثل Ruby نیاز به افزوده شدن امکانات جدید به دستور زبان جاوا هر روز بیشتر و بیشتر احساس می شد.مخصوصا اینکه رقیب Enterprise جاوا یعنی دات نت با پشتیبانی از یه دو جین زبان برنامه نویسی زنده و مرده برای برنامه نویسی پلت فرمش در برنامه نویس ها ایجاد کشش میکنه!

همونطور که گفتم اضافه کردن موارد جدید به جاوا مثل چیز هایی که در C یا ++C و یا Ruby ووو هست با فلسفه وجودی جاوا سازگار نیست.از طرفی هر چیزی در جاوا اول باید از صافی JCP -سان و در نهایت پیاده کننده گان تجاری و غیر تجاری SE-EE و ME بگذره و این بسیار زمانبره و البته نگرانی از عدم سازگاری هم در کد ها رو نباید فراموش کرد!

جواب جاوا به این تناقصات (ارایه امکانات جدید جالب و جذاب و ایجاد زبانی به غیر از جاوا برای برنامه نویسی پلت فرم جاوا در مقابل فلسفه و مدل پیشرفت و مقاومت هایی که در مقابل امکانات جدید هست) در (JCP (JSR 241 و به شکل استاندارد و مورد تائید سان Groovy بود!

در این پست سعی دارم دوستان علاقه مند به جاوا رو (که همشون رو با مهری پاک دوست دارم)
مقدمه ای بر این زبان جذاب و شروع کار با این زبان رو توضیح بدم.
امید وارم بتونم تجربیات دو ماهه خودم رو که البته به علت مشغله زیاد پر بار نیست رو در اختیار دوستان بذارم و فتح بابی برای ادامه این مسیر توسط دوستان دوستان کرده باشم.

Groovy چیست:
طبق شعار سایت رسمی (یعنی سازندگانش!):
An agile dynamic language for the Java Platformزبانی چابک(:لبخندساده:) و پویا برای برنامه نویسی پلت فرم جاوا!
خوب در عین اینکه این تعریف خلاصه ای هست اما نکات کلی رو برای تعریف Groovy داره!نکات کلیدی Aglie و Dynamic.
اول ببنیم Aglie در این تعریف چه منظوری داره:به نظرتون برای کار کردن با فناوری هایی مثل Database-XML-COM-Web Development وو در جاوا باید کد بیشتری نوشته بشه یا در زبان هایی مثل PHP-Ruby ؟ بله در جاوا باید کد بیشتری نوشته بشه .تست و توسعه برنامه های در سطح وب با جاوا نسبت تکنولوژی هایی مثل PHP و Ryby هم زمان توسعه بیشتری میطلبه و هم اینکه دیپلوی کردن زمانبر تری داره (و این زیاد با استاندار های متد Aglie برای توسعه برنامه ها هم خوان نیست!)چرا ؟چون :
1-در جاوا به علت دنبال کردن شی گرایی در نهایت حد خودش استفاده از فناوری ها در سطح API مقدوره و نه در زبان!مثلا برای کار با XML و یا Database شما باید با تعداد نسبتا زیادی از اشیاء بشه بین 4 تا 15 شی آشنا باشید و کار کنید!این یعنی تعداد خطوط بیشتر , احتمال خطای بیشتر توسط برنامه نویس و در نهایت تست و دیباگ زمانبر تر!در عوض در زبان های اسکریپتی مثل Ruby و یا PHP الا رغم داشتن امکانات شی گرایی میتونید با چند تا تابع و دستور(منظور Syntax خود زبانه) و در چند خط به شکلی سریع یه برنامه Database و یا XML و وب سرویس داشته باشید.متد های Aglie که الان خیلی در بین برنامه نویسانی با تیم های کوچکتر و بودجه کمتر فعالیت میکنند(مثلا پروزه های اپن سورس!) تمایل به روشی دارند که این زبان های اسکریپتی فراهم می کنند!
2-تایپینگ غیر خودکار در جاوا!شما باید هر شی رو خودتون بشناسید و به کامپایلر راهنمایی لازم رو بدین.همین موضوع رو با Generics ها تصور کنید که چقدر کد رو برای خوندن و درک و نوشتن سخت میکنه!زبان های اسکریپتی به شکل خودکار کار Typing رو به عهده میگیرند!(هر چند ممکنه ویژگی Type Safe بودن رو از دست بدند ولی خوب اصولا چنین ادعایی هم ندارند!).

خیلی خوب .حالا ببینیم Dynamic به چه چیز اشاره داره:
زبان های دینامیک توانایی توسعه برنامه رو در حین اجرا از طریق تغیر ساختار در اشیاء .Type ها و حتی منطق کاری برنامه دارند.در زبان های دینامیک شما این کار ها رو در حین کامپایل انجام میدین(البته همین الان هم امکاناتی مثل Reflection و Proxisدر API جاوا برای این کارها هست!اما جای بحث داره.).با این ویژه گی میتونید در حین اجرا حتی Contorl Folow هاتون رو هم در حین اجرا تغیر بدین و Control Folow خای جدید تری بسازید.
یه ویژه گی دیگه و بسیار مهم اینه که میتونید زبان رو طبق ادبیات مورد نیازتون گسترش بدین!مثلا فرض کنید می خواید کدی بنویسد که تاریخ تولدتون رو بده!میتوند دستوری مثل زیر رو بسازید:

Day.Of.My.BD
و کاری کنید که این دستورات حین اجرا هم ساخته شند!
خوب این یه نمونه کوچیکه!:لبخندساده:
در استفاده از زبان های دینامیک که به میزان زیادی از Runtime استفاده می کنند چند نکته قابل توجهه اما مهمترینشون سرعت اجرای برنامست!
همه ما میدونیم که زبان های کامپایلری از زبان های اینترپری سریعتریند.منتها دو مورد می تونه به ما توجیه مناسیی از سرعت مناسب زبان دینامیکی مثل Groovy بدند:
1-Groovy روی JVM اجرا میشه.این یعنی کد های شما در نهایت توسط کامپایلر Groovy به بایت کد های سازگار با JVM تبدیل میشه.و میتونن از Just In Time و سایر تکنیک های بهنیه سازی استفاده کنند.و میشه گفت مجموعه کامپایلر Groovy و JVM بهینه می تونند کد های شمار و در حد کد های سریع C اجرا کنند(در مقام مقایسه کد های C هم از اسمبلی و اسمبلی هم از باینری Op Code های CPU کند تر اجرا می شوند!:لبخندساده:).
2-اینکه سرعت پردازش CPU ها خیلی بالا رفته!این مسئله باعث شده تا زبان های اینترپرتری هم به خوبی یه زبان هیبرید مثل جاوا رشد کنند(PHP!)

حالا ببنیم Groovy چه امکانات اختصاصی داره و اینکه چرا Groovy؟

1-Groovy بر اساس JVM کار میکنه!این یعنی کل پلت فرم Java در دستان شماست!و البته استقلال از پلت فرم!
2-ویژه گی های جذاب زبان هایی مثل Python, RubyوSmalltalk!
3-فراهم کردن امکانات برنامه نویسی پیشرفته در زبان با منحنی آموزشی در حد صفر(این دیگه یه مقدار اغراق آمیزه!)
4-شی گرایی به زبانی تازه!اما آشنا!
5-ایجاد تسهیلات زیاد در زمینه پشتیبانی از کارهای متداول و مرسوم برنامه نویسی در زمینه XML-DataBase-GUI در سطح زبان!
6-امکان توسعه زبان بر اساس ادبیات زمینه برنامه نویسی!مثلا ایجاد زبانی برای هوش مصنوعی یا مهندسی ژنتیک که دقیقا از واژه های مرسوم در اون زمنه برای ساخت برنامه استفاده میکنه!
ووو

چند نمونه از کد های Groovy!که نشون میده چرا خوبه Groovy رو یاد بگیریم!:
الف)ساده تر و خوش فهم تر در نتیجه منحنی آموزشی کوتاهتر برای یه تازه کار .و کوتاهتر برای کسی که قبلا با جاوا کار کرده!
1-یه حلقه ساده در جاوا:

for(int i = 0; i < 10; i++)
{
//...
}

همون حلفه در Groovy:

10.times {
//...
}
میبیند چقدر به زبان ما شبیه!ده بار ...

ب)Groovi همون جاواست!
نگاه کنید :
2-کلاس های جاوا:
کد زیر نام کلاس ها رو چاپ میکنه(به کاربرد دستور println دقت کنید!خبری از زنجیره طولانی متد کال System.out.PrintLn نداره.یا Static Import های جاوا 5 و یاد گرفتنشون!)

println XmlParser.class
println XmlParser.class.superclass
نتیجه:

class groovy.util.XmlParser
class java.lang.Object

ج):دینامیک بودن و اینکه Typing درش اختیاریه!
مثلا برای توسعه کلاس String و اضافه کردن متدی برای معکوس کردن رشته ها:

String.metaClass.isPalindrome = {->
delegate == delegate.reverse()
}
word = 'tattarrattat'
println "$word is a palindrome? ${word.isPalindrome()}"
word = 'Groovy'
println "$word is a palindrome? ${word.isPalindrome()}"

نتیجه:

tattarrattat is a palindrome? true
Groovy is a palindrome? false

به کاربرد کلاس metaClass دقت کنید مثل Prototype های جاوا اسکریپت عمل کرده.یه -همون چیزی که با جاوا SE 7 شده-Closur هم برای ساخت بدنه متد استفاده شده و تمام!نیازی به نوشتنیه کلاس تازه و ارث بری از کلاس String نیست!ای وای کلاس String که Final تعریف شده!پس ما چطور ازش به ارث بردیم؟این همون دینامیک بودن Groovy رو نشون میده!گسترش زبان و شی گرایی و البته از بین بردن محدودیت های شی گرایی JDK استاندارد!

د)توسعه یافته JDK در دنیای Groovy اسمش میشه :GDK
مثلا استفاده از کلاس java.util.ArrayList در Groovy:


lst = ['Groovy' , 'is' , 'hip' ]
println lst.join(' ' )
println lst.getClass()

نتیجه:

Groovy is hip
class java.util.ArrayList

چند نمونه کد دیگه:فکر میکنم درکشون آسونهک

0.upto(2) { print "$it " }
نتیجه :

0 1 2


3.times { print "$it " }
نتیجه :

0 1 2

یه نمونه کد جاوا برای کار با کلاس java.lang.Process


//Java code
import java.io.*;
public class ExecuteProcess
{
public static void main(String[] args)
{
try
{
Process proc = Runtime.getRuntime().exec("svn help" );
BufferedReader result = new BufferedReader(
new InputStreamReader(proc.getInputStream()));
String line;
while((line = result.readLine()) != null)
{
System.out.println(line);
}
}
catch(IOException ex)
{
ex.printStackTrace();
}
}
}

همون کد با Groovy!

println "svn help".execute().text
نه import نه Exeption هندلینگ اجباری و از همه جالبتر استفاده اط یه رشته به عنوان شی!که با بستار ها ممکن شده!خلاصست نه!؟

Java beans در جاوا :


//Java code
public class Car
{
private int miles;
private int year;
public Car(int theYear) { year = theYear; }
public int getMiles() { return miles; }
public void setMiles(int theMiles) { miles = theMiles; }
public int getYear() { return year; }
public static void main(String[] args)
{
Car car = new Car(2008);
System.out.println("Year: " + car.getYear());
System.out.println("Miles: " + car.getMiles());
System.out.println("Setting miles" );
car.setMiles(25);
System.out.println("Miles: " + car.getMiles());
}
}

در Groovy:


class Car
{
def miles = 0
final year
Car(theYear)
{
year = theYear
}
}
Car car = new Car(2008)
println "Year: $car.year"
println "Miles: $car.miles"
println 'Setting miles'
car.miles = 25
println "Miles: $car.miles"


پارامتر های اختیاری در Groovy:



def log(x, base=10)
{
Math.log(x) / Math.log(base)
}
println log(1024)
println log(1024, 10)
println log(1024, 2)


پیاده سازی interface ها در جاوا:

button.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
JOptionPane.showMessageDialog(frame, "You clicked!" );
}
});
در Goovy:

button.addActionListener(
{ JOptionPane.showMessageDialog(frame, "You clicked!" ) } as ActionListener
)

تحریف عملگر ها:



class ComplexNumber
{
def real, imaginary
def plus(other)
{
new ComplexNumber(real: real + other.real,
imaginary: imaginary + other.imaginary)
}
String toString() { "$real ${imaginary > 0 ? '+' : ''} ${imaginary}i" }
}
c1 = new ComplexNumber(real: 1, imaginary: 2)
c2 = new ComplexNumber(real: 4, imaginary: 1)
println c1 + c2

نتیجه :

5 + 3i

کار با XML:
این کد XML رو در نظر بگیرید:


<languages>
<language name="C++">
<author>Stroustrup</author>
</language>
<language name="Java">
<author>Gosling</author>
</language>
<language name="Lisp">
<author>McCarthy</author>
</language>
<language name="Modula-2">
<author>Wirth</author>
</language>
<language name="Oberon-2">
<author>Wirth</author>
</language>
<language name="Pascal">
<author>Wirth</author>
</language>
</languages>


برای پردازش این XML در Groovy:

document = groovy.xml.DOMBuilder.parse(new FileReader('languages.xml' ))
rootElement = document.documentElement
use(groovy.xml.dom.DOMCategory)
{
println "Languages and authors"
languages = rootElement.language
languages.each { language ->
println "${language.'@name'} authored by ${language.author[0].text()}"
}
def languagesByAuthor = { authorName ->
languages.findAll { it.author[0].text() == authorName }.collect {
it.'@name' }.join(', ' )
}
println "Languages by Wirth:" + languagesByAuthor('Wirth' )
}
نتیجه:


Languages and authors
C++ authored by Stroustrup
Java authored by Gosling
Lisp authored by McCarthy
Modula-2 authored by Wirth

کار با دیتا بیس در Groovy:


def sql = groovy.sql.Sql.newInstance('jdbc:mysql://localhost:3306/weatherinfo' ,
userid, password, 'com.mysql.jdbc.Driver' )
println sql.connection.catalog
println "City Temperature"
sql.eachRow('SELECT * from weather' ) {
printf "%-20s%s\n" , it.city, it[1]
}

نتیجه:دیتا بیس در شش خط!با چاپ!


City Temperature
Austin 48
Baton Rouge 57
Jackson 50
Montgomery 53
Phoenix 67
Sacramento 66
Santa Fe 27
Tallahassee 59


فکر میکنم برای آشنایی با Groovy و بعضی ویژه گی های جالبش همین کافی باشه.
سعی می کنم در پست بعدی در همین تاپیک به عنوان قسمت دوم مباحث عملی و روش استفاده از ابزار های Groovy رو پوشش بدم.
امید وارم مفید بوده باشه و لذت برده باشید.
مشتاقانه منتظر انتقادات و نظراتتون هستم.
موفق باشید.
منابع :
سایت رسمی Groovy:
http://groovy.codehaus.org/
jcp:
http://www.jcp.org
(jsr 241
تالیف :مزدادوست.(پایان قسمت اول)

mazdadoost
سه شنبه 18 تیر 1387, 12:15 عصر
سلام به جاوا به زبان Groovy:آشنایی با زبان برنامه نویسی Groovy
نصب پیکر بندی و اجرای اسکریپت ها و برنامه های Groovy:

بسیار خوب به بخش عملی آشنایی با Groovy وارد میشم!
اول از همه من فرض میکنم که شما خواننده گرامی مشمول شرایط زیر می باشید:
1-آشنایی ابتدایی با جاوا SE و اطلاعاتی درباره دستور زبان و کلاس های پر کاربرد.
2-داشتن JDK .هر JDK ای که JRE ش 1.4 به بالا باشه.
و اما نصب و پیکربندی Groovy در ویندوز:(TODO:دوستانی که با OS لینوکس کار میکنند چنانچه مایل باشند و پس از تست عملی نصب در لینوکس محبت کنند و با پست هایی با عنوان نصب Groovi در لینوکس تاپیک رو ارتقاء ببخشند.)
اول از همه به سایت لینک دانلود Groovy برای ویندوز برید یه این آدرس:
لینک دانلود Groovy برای ویندوز http://dist.codehaus.org/groovy/distributions/installers/windows/nsis/groovy-1.5.6-installer-2.exe
تا الان این آخرین ورژن هست که stable و مورد تاییده.میتونید به رفتن به آدرس :
لینک دانلود برای کلیه پلت فرم ها یی که Groovy پشتیبانی میکنه:http://groovy.codehaus.org/

در ویندوز بعد از دانلود کردن اینستالر Groovy که حدود 22 MB هست کافیه اینستالر رو اجرا کنید.این نصب خودکار Groovy رو براتون انجام میده و هیچ گونه پیکر بندی از طرف شما نمی طلبه.همین حالا میتونید فایل هایی با پسوند groovy در Notpad بسازید و اسکریپت هاتون رو بنویسید و با دبل کلیک روشون مثل فایل های اجرایی اجراشون کنید!
اما بد نیست کمی از جزئیات نصب و پیکربندی رو براتون توضیح بدم تا اگر خواستید خودتون به شکل دستی نصب و پیکربندی کنید راحت باشید.اگر شما میخواید Groovy رو بدون اینستالر ویندوز دانلود و نصب کنید :
1-Groovy رو به صورت پکیج zip از سایت دانلود کنید .
2-فایل zip رو در یه جای هارد مثلا d:\Groovy باز Extract کنید.
3-توی این مسیر :D:\Groovy\Groovy-1.5.6 برید.حالا باید
4-یه متغیر محیطی سیستمی به اسم GROOVY_HOME در سیستم ایجاد کنید(بنده فرض میکنم دوستانی که با جاوا در ویندوز کار می کنند این کارو خوب بلدند.)و مقدارشو به :D:\Groovy\Groovy-1.5.6 ست کنید.
5-حالا به مغیر محیطی سیستمی PATH این مسیر رو اضافه کنید :
D:\Groovy\Groovy-1.5.6 \bin
و تمام شد.به Command Promt برید(Start>run>cmd)و دستور زیر رو اجرا کنید:

groovy -v
اگر همه کارها خوب پیش رفته باشه groovy شماره ورژنش رو نمایش میده و این یعنی میتونید برای نوشتن برتامتون حاضر شید!

حالا باید ببنیم چطور میتونیم اسکریپت همون رو در Groovy اجرا کنیم:میشه گفت 4 روش کلی و اصلی هست:
1-استفاده از برنامه Swing به نام Groovy Console که با Groovy نصب میشه.این از همه روش ها ساده ترو سر راست تر و تعاملی تره.و البته این برنامه امکاناتی ابتدایی برای ادیت کد های Groovy مثل Code Coloring و پنجره Output جداگانه داره .پس من هم همین رو برای ادامه این آموزشی استفاده میکنم.برای اجرای این برنامه کافیه مسیر زیر رو دنبال کنید:
Start>Groovy>Start GroovyConsole
برنامه اجرا میشه!
2-استفاده از دستور خط فرمان و در واقع به نوعی اینتر پرتر Groovy با عنوان Groovy!کافیه برای اجرای این دستور در خط فرمان تایپ کنید Groovy
میتونید با خوندن راهممایی که چاپ میشه از این دستور استفاده کنید اما به شکل معمول کافیه مسیر و نام فایل اسکریپتتون رو بهش با دستوری مثل زیر بدین تا واستون اسکریپت رو خط به خط اجرا کنه:

groovy c:\iScript.groovy
3-همونطور که گفتم Groovy همون جاواست.پس یعنی اسکریپت های شما در واقع اول به فایل های کلاس ترجمه میشند بعد با اینتر پرتر جاوا اجرا میشند.در در حالت قبل این کار ها در پس زمینه انجام میشد.اما فرض کنید میخواید فایل های اسکریپتتون رو برای استفاده در جاوا به فایل کلاس کامپایل کنید برای این کار باید از کامپایلر Groovy با عنوان Groovyc استفاده کنید.برای مثال فرض میکنم دایرکتوری کاری شما c:\ myapp باشه و فایلی به اسم iScript.groovy درش باشه برای کامپایل این فایل به فایل کلاس این دستور رو اجرا کنید:

Groovyc iScript.groovy
بسته به این که در اسکریپتتون چه دستورات و API ای استفاده کرده باشید به سری فایل با پسوند کلاس تولید میشه که اصلش iScript.class هست و میتونید براحتی در کلاس پت برنامه جاواتون بذارید و استفاده کنید.
4-یه روش کمتر تعاملی تر هم استفاده از دستور Groovysh هست.

خوب و حالا اولین اسکریپتمون رو مینویسیم:
برنامه Groovy Console رو اجرا کنید و این کد رو در پنجره بالاییش بذارید! (فعلا نگران جزئیاتش نباشید!)


for(i in 0..2) { print 'ho ' }
println 'Merry Groovy!'
حالا دکمه های Ctrl +R رو بزنید نتیجه در پنجره پایینی نمایش داده میشه.
خوبه!اولین برنامتون را با Groovy نوشتین.

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

تالیف :مزدادوست.
پایان قسمت دوم.
موفق باشید.

rezaTavak
چهارشنبه 19 تیر 1387, 13:20 عصر
نصب در لینوکس ubuntu:
ابتدا پکیجهای جاوا را مطمئن شوید که نصب شده در synaptic این پکیجها را کنترل کنید:
sun-java6-jdk

خودش هر چیزی را که نیاز داشته باشد همه را کنترل خواهد کرد.

سپس از مسیر زیر deb را دریافت کنید:
http://dist.codehaus.org/groovy/distributions/installers/deb/

بسته به آخرین نگارش.

سپس در خط فرمان با دستور sudo dpkg -i groovy-1.5.6.deb (بسته به نام فایل دانلود شده) در مسیر فایل دانلود شده اجرا کنید یا مستقیما روی پکیج دانلود شده دابل کلیلک کنید تا توسط Package Installer نصب شود.

سپس فایل ~/.bashrc را ویرایش کرده و دومتغیر زیر را در آن قرار دهید:



export JAVA_HOME=/usr/lib/jvm/java-6-sun
export GROOVY_HOME=/usr/share/groovy/
کار تمام است با groovysh وارد شوید.

در تمام لینوکسهای مبتنی بر دبیان کار بصورت زیر است. در لینوکسهای دیگر با alien میتوانید rpm بسازید.

mazdadoost
دوشنبه 31 تیر 1387, 19:49 عصر
با سلام:(ببخشد اگر دیر شد)

با Groovy که از حالا به بعد به اختصار بش میگم G آشنا شدیم و نصبش کردیم و حالا میخوایم یه شیرجه کم عمق در G داشته باشیم.خوب گفتم که G همون جاواست پس باید شباحت هایی داشته باشند:
1-کامنت های G مثل جاوا هستند .به جز این استثنا :

#!/usr/bin/groovy
این جور کامنت ها رو فقط میتونید در اولین خط اسکریپت هاتون بذارید و معنی خاصی وقتی G رو در یونیکس اجرا میکنید میده:این جور کامنت ها رو شی بنگ بخونید .
2-در G شکل استاندارد حلقه

for(init;test;inc)
وجود نداره!
3-ساختار های کنترلی دیگه مثل swith و if ووو یه جورند ولی یه تفاوت هایی هست.
4-ساختار بسته ها دستورات package و import وو ساخار داریکتوری فایل ها و فلدر ها.
5-مدیریت exeption ها.
6-تعریف متغیر ها -لیترلال ها عبارات و انتصاب مقادیر .شما لیترال هایی از نوع شی مثل Range -Map-List خواهید داشت.
7-روش استفاده از متغیر ها و اشیاء.
پس میتونم روی بیس جاوای شما حساب کنم و نکته وار بحث رو ادامه بدم:
*-آرگومان متد ها رو میتونید بدون گذاشتن در پرانتز استفاده کنید:

URLEncoder.encode 'a b'
*-تمام این کلاس ها در اسکریپت ها و کلاس های G شما از قبل ضمیمه شدن و نیازی به import ندارند:
groovy.lang.*, groovy.util.*,
java.lang.*, java.util.*, java.net.*, and java.io.*
java.
math.BigInteger
*-در G تعریف کلاس ها مثل java ست:

class Book {
private String title
Book (String theTitle) {
title = theTitle}
String getTitle(){
return title
}
}
*-اسکریپت ها در G همونطور که میبینید برای اجرا نیازی به متد main ندارند. G هر اسکریپتی رو در یه شی از نوع Script میذاره و در متد main ی که خودش میسازه وارپ میکنه.و اسکریپ هم محتوای خودش رو مثل سایر زبان های اسکریپتی خط به خط اجرا میکنه!

Book gina = new Book('Groovy in Action')
شما میتونید از تایپینگ خودکار استفاده کنید و حتی نوع شی رو هم نگید G خودش میفهمه!

def gina = new Book('Groovy in Action')
*-Bean ها در G خیلی راحت دست میشند!هیچ نیازی به متد های get و set نیست!کافیه خصوصیت خودتون رو در کلاس تعریف کنید و بگید تایپش چیه!G خودش متد های get و set لازم رو میسازه!

class Book {
String title
}
def groovyBook = new Book()
groovyBook.setTitle('Groovy conquers the world')
groovyBook.title = 'Groovy in Action'
دقت کنید property شما هم با متد هم با انتصاب قابل تغیره.متد های setTitle() و get متناظرش خودکار ساخته میشه!
*-رشته ها در G خیلی پیشرفته شدن و اصولا علاوه بر امکانات کلاس String شما از طریق GString میتونید کارهای جذابی با رشته ها بکنید:
مثلا :[
CODE]
def nick = 'Gina'
def book = 'Groovy in Action'
def booknice="$nick is $book"
[/CODE]
کارکتر $ به G میگه که چیزی که بعدش میاد مقدار یه عبارته.دقت کنید از دو جور لیترال رشته ای استفاده شده.
'' و ''" ."" ها رشته های دینامیک هستند دیگه نیازی به هارد کدینگ رشته ها با عملگر + ندارید!(کارهای دنیای Perl و PHP!).
در G میتونید بدون دردسر رشتتون رو در چند خط بشکنید!:

sql = """
SELECT FROM MyTable
WHERE Year = $date.year
"""
کافیه لیترال هاتون رو بین """ """ بذارید و G همه رشترو خودش در هر چند خط دنبال میکنه و به هم می چشبونه!
فرق '' با "" چیه!"" کاراکتر $ یا ${} رو میفهمه اما '' نمیفهمه!
*-در G نوع داده اولیه وجود نداره!همه چیز حکم شی رو دارند!مثل Number -boolean -int .....پس بدن اینکه بخواید از کلاس های وارپر یا Boxing و Unboxing استفاده کنید با تمام متغیر های عددی تون مثل اشیا عمل کنید!

def x = 1
def y = 2
x.plus(y)

* - در G شما میتونید لیترال هایی از دو نوع کلشکن بسیار پر کاربرد یعنی Map و List داشته باشید.
برای تعریف List:

def roman = ['', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII']
roman[4] == 'IV'
roman[8] = 'VIII'
برای استفاده از Map که یه لیست از کلید ها و مقادیره :

def http = [
100 : 'CONTINUE',
200 : 'OK',
400 : 'BAD REQUEST' ]http[500] = 'INTERNAL SERVER ERROR'
*-شما میتونید اشیایی از نوعی Rang تعریف کنید(یاد Fortran بخیر!)
یه رنج یه خیلی ساده یه اول داره و یه آخر و G میتونه درک کنه که بین این اول و آخر چی هست و چطور میشه در این محدوده جلو عفب رفت!

def x = 1..10
x.contains(5)
x.reverse()

*-شما میتونید حتی قطعاتی از کدتون رو به مثابه یه شی کنید!یعنی همون closuresها!همون چیزی که قراره در SE7 انقلابی به پا کنه !
صبر داشته باشید ای ویژه گی واقعا چذابه!
[CODE][def totalClinks = 0
def partyPeople = 100
1.upto(partyPeople) { guestNumber ->
clinksWithGuest = guestNumber-1
totalClinks += clinksWithGuest
}/CODE]
در اینجا متد upto شی totalClinks دو آرگومان داره که آرگومان دوم و آخرش یه شی closures هست که به شکل لیترالی از نوع closures بش رد شده .یعنی بین دو تا {} .خود closures ها میتونند پارامتر هایی داشته باشند .که در اول closures میان و بدنه closures که بعد از <- میاد!با closures میشه کارهای بسیار پیچیدهای انجام داد!
*-همونطور که دیدید تا الان خبری از ; هم در انتهای عبارات نیست .خط جدید یعنی عبارت جدید.پس تا وقتی که هر خط تنها یه عبارت باشه نیازی به ; هم نیست!
خوب .در پست های بعدی هر کدوم از این نکات کلیدی رو باز میکنم.
موفق باشید.

mazdadoost
دوشنبه 07 مرداد 1387, 12:56 عصر
با سلام:
دوستان عزیز از اون جایی که در ادامه این تاپیک در نظر دارم کاربرد های Groovy رو در چند محدوده پر کاربرد برنامه نویسی مثل Swing -Database-Xml-Ant و زمینه مورد علاقه خودم Web و Grails عزیز توضیح بدم سعی کنید بحث رو حد اقل سر سری هم شده دنبال کنید . و سوالاتتون رو مطرح کنید تا بتونیم در کنار هم Groovy رو تجربه کنیم.
ممنون.

farzane khanoom
دوشنبه 14 مرداد 1392, 11:07 صبح
دوستان عزیز سلام
یه سوال دارم خواهشمندم هر کسی در مورد اون اطلاعاتی داره بگه چون نیاز حیاتی دارم بهش اما هیچ جا نتونستم جوابمو بگیرم
چجوری میشه با گرووی یه dsl طراحی کرد برای تست نرم افزار ؟

cups_of_java
دوشنبه 14 مرداد 1392, 16:00 عصر
چطور نتونستین جوابتونو پیدا کنید:
http://www.ibm.com/developerworks/library/j-pg02179/
http://www.ibm.com/developerworks/java/library/j-eaed15/index.html
http://docs.codehaus.org/display/GROOVY/Writing+Domain-Specific+Languages

اگه خیلی میخواین زمان بزارین و وارد جزییات بشین این کتاب (http://www.amazon.com/dp/184719690X) رو دانلود کنید بخونید.

farzane khanoom
دوشنبه 14 مرداد 1392, 18:48 عصر
راستش من تخصص زیادی توی برنامه نویسی با جاوا ندارم و فرصت یادگیری بصورت گام به گام هم ندارم. و تا ماه آینده باید از این پایان نامه دفاع کنم. آیا می تونید از دوستان برنامه نویس کسی رو به من معرفی کنید که در این زمینه به من کمک کنه ؟
این آدرس ایمیل منه
farzaneh_r_it@yahoo.com

cups_of_java
دوشنبه 14 مرداد 1392, 21:45 عصر
به من پی ام بدید تو یاهو اگه تونستم کمکتون می کنم

farzane khanoom
سه شنبه 15 مرداد 1392, 16:58 عصر
متاسفانه موفق به انجام این کار نشدم
گویا pm من به به این ID به دستتون نمی رسه (cups_of_java)
اگر IDتون رو لطف کنید ممنون میشم