1 / 23

מבוא ל Groovy

מבוא ל Groovy. תכנות מתקדם 2 89-211 תרגול מספר 12 תש"ע 2009-2010. אליהו חלסצ'י. הקדמה. Groovy היא שפת סקריפט לפלטפורמת Java שפות סקריפט מאפשרות קלות וגמישות בתכנות הן דינאמיות ולכן יש פחות הגבלות משפה רגילה מאפשרות פיתוח מהיר יותר (פחות קוד לכתוב) על חשבון זמן ריצה - interpreter

zamora
Download Presentation

מבוא ל Groovy

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. מבוא ל Groovy תכנות מתקדם 2 89-211תרגול מספר 12 תש"ע 2009-2010 אליהו חלסצ'י

  2. הקדמה • Groovy היא שפת סקריפט לפלטפורמת Java • שפות סקריפט מאפשרות קלות וגמישות בתכנות • הן דינאמיות ולכן יש פחות הגבלות משפה רגילה • מאפשרות פיתוח מהיר יותר (פחות קוד לכתוב) • על חשבון זמן ריצה - interpreter • שפות כגון Python או Ruby עברו בהצלחה לפלטפורמה של Java • Jython, JRuby • אז למה יש לנו צורך ללמוד עוד שפה??

  3. הקדמה לא צריך ללמוד שפה חדשה כדי לתכנת ב groovy • Jython ו JRuby נותנות הרגשה שלPython ו Ruby • הן גם משתמשות בספריות הקוד שלהן... • Groovy נותנת הרגשה של Java ללא הגבלות • Groovy מבדילה עצמה מהאחרות באמצעות • התחביר שלה • והיכולת להשתמש בספריות הסטנדרטיות של Javaבאופן טבעי

  4. הקדמה • אין צורך יותר בקימפול • מתאפשר שימוש ב dynamic types • תחביר עם פחות אילוצים • ניתן להריץ סקריפטים בתוך אפליקציות Java • Groovy מגיעה עם interpreter • מפרש בזמן ריצה את הקוד ל byte code ומריץ אותו • תזכורת: Scala תומכת גם בקימפול הקוד לפני ריצה, ולכן היא סקלבילית גם לתוכנית גדולות...

  5. הבדלים מ Java • לא צריך לבצע import מפורש לבאים: • == זה equals (לפי תוכן) • הגדרת מערך: • במקום • יש לכתוב • לולאות for: • במקום • הבאים אפשריים: • java.io.* • java.lang.* • java.math.BigDecimal • java.math.BigInteger • java.net.* • java.util.* • groovy.lang.* • groovy.util.* int[] a = {1,2,3}; int[] a = [1,2,3[ for (int i=0; i < len; i++) {...} for (i in 0..len-1) {...} for (i in 0..<len) {...} len.times {...}

  6. הבדלים מ Java • המילה return אופציונאלית • this מתוך מתודה סטטית מתכוון למחלקה • ברירת המחדל למתודות ולמשתני מחלקה – public • ל protected אותה המשמעות כמו ב Java • בינתיים לא ניתן ליצור מחלקה בתוך מחלקה • אך יש תמיכה ב closures (!) • Groovy לא בודק חתימה של throws למתודה • משום שאין הבדל מבחינתו בין checked לבין unchecked exceptions

  7. קיים ב Groovy ולא ב Java • תמיכה ב Closures • תחביר מיוחד לרשימות ומפות • תמיכה בביטויים רגולריים כחלק מתחביר השפה • תמיכה גם ב static וב dynamic typing • לא צריך להצהיר על טיפוס • איטרציה פולימורפית • Switch Case פולימורפיים • ניתן להטמיע ביטויים בתוך מחרוזות • לא צריך לשרשר מחרוזות וביטויים בעצמנו

  8. קיים ב Groovy ולא ב Java • נוספו המון מתודות עזר ל JDK • קל יותר לכתוב Beans • Beans הן מחלקות רגילות המשמשות כ struct • ב Java bean צריך להגדיר setters ו getters • וב Groovy bean לא צריך, נעשה אוטומטית • במשפטי ifלא צריך לוודא תחילה שהאובייקט אינו null • תמיכה ב functional programming • לדוג' def fac(n) { n == 0 ? 1 : n * fac(n - 1) }

  9. צעדים ראשונים • אתר רשמי: • http://groovy.codehaus.org/ • הוראות התקנה: • http://groovy.codehaus.org/Installing+Groovy • התקנת ה plug-in ל eclipse: • http://dist.springsource.org/release/GRECLIPSE/e3.5/ • יצירת פרויקט חדש: • Filenewproject… • GroovyGroovy project • או ע"י

  10. צעדים ראשונים • ניצור קובץ חדש ע"י srcnewfile • נקרא לו בשם myTest.groovy • כבר ניתן לראות ש: • ב script אין צורך ב main... • Dynamically Typed • x יכול להיות כל טיפוס x="Hello World!" println x x = 1 println x x = new java.util.Date() println x x = -3.149 println x x = false println x

  11. רשימות ומפות • פעולות נפוצות list=[] list.add ("Hello") list.add ("World!") list+=['today','is',new Date()] println list.join(' ') println list[0] println list[-1] println list.size() list = [4, 5, 6, 6, 4, 7, 2] println list.count(6) println list.sort() map=[:] map.put ("hello", "World!") map+=['today is':new Date(), 89:210, 'advanced':'programming'] println map['hello'] println map.hello map[89]=211 println map[89] println map.size()

  12. closures • Closure מזכיר מחלקה אנונימית פנימית אלא ש • הוא בעצם מתודה אחת הניתנת לקריאה • הוא יכול לקבל פרמטרים (כמה שנרצה) • ללא פרמטרים אפשר לעשות שימוש ב it closure = { param -> println("hello ${param}") } closure.call("world!") closure = { greeting, name -> println(greeting + name) } closure.call("hello ", "world!") closure = { println"hello " + it } closure.call("world!")

  13. closures דוגמאות למעבר על אוספים באמצעות Closures • אפשר באמצעות לולאת for • אפשר באמצעות מתודותעזר כגון each המקבלותclosure כפרמטר • it כמו גם הפרמטרים,יכולים להיות מכל טיפוס(איטרציה פולימורפית) • כיצד נעבור על map באמצעות closure? for(x in list){ sum+=x } list.each {sum+=it} list.findAll {it>5}.each{sum+=it} list.findAll {x -> if(x>5) sum+=x} list.findAll {if(it>5) sum+=it} println list.every {it>5} println list.any {it>5} map.each{key,val -> println"$key = $val"}

  14. Dynamic Typing • קודם ראינו השמה של טיפוסים שונים לאותו ה x • ניתן גם להניח מה יש לאובייקט, לדוגמא: class Movie{ intlength String name } class Book{ String name String author } def myFavorite(thing){ println"my favorit "+thing.class +" is "+ thing.name } movie= new Movie(length:124, name:"Star Wars") book = new Book(name:"The War of the Worlds", author:"H.G. Wells") myFavorite(movie) myFavorite(book)

  15. Dynamic Typing • גם במבנה switch case, הפרמטר לא חייב להיות מטיפוס מסוים... def x = 1.23 def result = "" switch ( x ) { case"foo": result = "found foo" // lets fall through case"bar": result += "bar" case [4, 5, 6, 'inList']: result = "list" break case 12..30: result = "range" break case Integer: result = "integer" break case Number: result = "number" break default: result = "default" } println result == "number"

  16. ביטויים רגולריים • זוכרים את Pattern ואת Matcher? • ~= מחזיר מופע של Matcher • בהקשר בוליאני מחזיר אמת אם קיים מופע לתבנית • ~== בודק התאמה לתבנית • בעצם קורא ל .matches() • קיימות מתודות עזר • replaceAll • replaceFirst • ועוד str = "89211" println str ==~ /\d+/ str = "AGCGTTCGAG GCTAGATTAA" if (str =~ 'TT'){ println'found a match' } ptrn = ~"TT" nStr = (str =~ ptrn).replaceAll('GC') println nStr

  17. beans • ב Groovy מספיק לכתוב רק את המאפיינים • ה setters וה getters קיימים אוטומטית... • כאמור ברירת המחדל היאpublic • דוגמא: class Foo { // read only property final String name = "John" // property with public getter and protected setter Integer amount protectedvoid setAmount(Integer amount) { this.amount = amount } // dynamically typed property defcheese }

  18. beans • ב Groovy: class Customer { // properties Integer id String name Date date // sample code staticvoid main(args) { def customer = new Customer(id:1, name:"Bean", date:new Date()) println("Hello ${customer.name}") println("your id is "+customer.getId()) } }

  19. beans import java.util.Date; publicclass Customer { // properties private Integer id; private String name; private Date date; public Integer getId() { returnthis.id; } public String getName() { returnthis.name; } public Date getDob() { returnthis.date; } publicvoid setId(Integer id) { this.id = id; } publicvoid setName(String name) { this.name = name; } publicvoid setDob(Date date) { this.date = date; } • ב Java היינו חייבים • להוסיף import • Setters ו Getters • לאתחל את המאפייניםאחד אחד... // sample code publicstaticvoid main(String[] args) { Customer customer = new Customer(); customer.setId(1); customer.setName("Bean"); customer.setDob(new Date()); System.out.println("Hello " + customer.getName()); System.out.println("your id is "+customer.getId()); } }

  20. סמסטר ב': כלים שימושיים Mercurial Maven Tomcat , Jetty תקשורת ו web Sockets Servlets, JSP עבודה מול מסד נתונים ע"י שכבת Hibernate ארכיטקטורות של web services Rest, Comet הרצת תוכנית Java כשירות Service ,Daemon שפות חדשות מבוא ל Scala מבוא ל Groovy סמסטר א': שפת Java היכרות עם Java תחביר Java Java containers Shared libraries כלים שימושיים SVN, ANT, Junit תכנות מקבילי מבוא ל Threads נושאים מתקדמים ב Threads Event driven GUI – SWT Design Patterns Creational, Structural, Behavioral Spring Framework דוגמת Design גדולה סיכום תרגולי הקורס כבר עברה לה שנה... בואו נראה מה למדנו:

  21. סמסטר ב': כלים שימושיים Mercurial Maven Tomcat , Jetty תקשורת ו web Sockets Servlets, JSP עבודה מול מסד נתונים ע"י Hibernate ארכיטקטורות של web services Rest, Comet הרצת תוכנית Java כשירות Service ,Daemon שפות חדשות מבוא ל Scala מבוא ל Groovy סמסטר א': שפת Java היכרות עם Java תחביר Java Java containers Shared libraries כלים שימושיים SVN, ANT, Junit תכנות מקבילי מבוא ל Threads נושאים מתקדמים ב Threads Event driven GUI – SWT Design Patterns Creational, Structural, Behavioral Spring Framework דוגמת Design גדולה סיכום תרגולי הקורס כבר עברה לה שנה... בואו נראה מה למדנו: 100% תכנון מול ביצוע! אנו בהחלט יכולים להיות גאים בעצמנו על ההספק! אבל האם אנו מתכנתים מתקדמים?

  22. סיכום תרגולי הקורס כדי להיות מתכנתים מתקדמים: • תגישו פרויקט איכותי עד ל dead line... • תעלו את הסיכומים ל wiki ותלמדו טוב למבחן! • תכירו לעומק את השפה בה אתם מתכנתים • תהיו הראשונים ללמוד על טכנולוגיות, שפות וכלים חדשים ברגע שהם רואים אור • תשכילו להשתמש בכלים, בשפות התכנות ובספריות הקוד שהכי מתאימים לעבודה הנדרשת • תחשבו על design (גמיש) לפני שתחשבו על קוד • תממשו את בדיקת הקוד לפני כתיבתו... • תזכרו שאתם לא מתכנתים לבד בפרויקט... • תתרמו לפרויקט קוד פתוח!! • הכי חשוב: תצברו ניסיון • תארו את הניסיון שלכם בבלוג ;-)

  23. סיכום תרגולי הקורס אני מודה לכם מאד על ההקשבה, הנכונות להשתתף בשיעור ולשאול שאלות, ובעיקר על ההתמדה... נותר לי רק לאחל לכם בהצלחה! בפרויקט, במבחן, בהמשך התואר ובכלל... אלי.

More Related