Download presentation
Presentation is loading. Please wait.
Published byGiles Harrison Modified over 6 years ago
1
מבוא ל Groovy אליהו חלסצ'י תכנות מתקדם 2 89-211 תרגול מספר 12
תש"ע מבוא ל Groovy אליהו חלסצ'י
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
צעדים ראשונים אתר רשמי: הוראות התקנה: התקנת ה plug-in ל eclipse:
הוראות התקנה: התקנת ה plug-in ל eclipse: יצירת פרויקט חדש: Filenewproject… GroovyGroovy project או ע"י
10
צעדים ראשונים ניצור קובץ חדש ע"י srcnewfile
נקרא לו בשם myTest.groovy כבר ניתן לראות ש: ב script אין צורך ב main... Dynamically Typed x יכול להיות כל טיפוס x="Hello World!" println x x = 1 x = new java.util.Date() x = x = false
11
רשימות ומפות פעולות נפוצות map=[:] map.put ("hello", "World!")
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 }
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{ int length String name } class Book{ 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 : result = "range" break case Integer: result = "integer" case Number: result = "number" default: result = "default" } println result == "number"
16
ביטויים רגולריים זוכרים את Pattern ואת 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 protected void setAmount(Integer amount) { this.amount = amount } // dynamically typed property def cheese }
18
beans ב Groovy: class Customer { // properties Integer id String name
Date date // sample code static void 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 ב Java היינו חייבים להוסיף import Setters ו Getters
import java.util.Date; public class Customer { // properties private Integer id; private String name; private Date date; public Integer getId() { return this.id; } public String getName() { return this.name; public Date getDob() { return this.date; public void setId(Integer id) { this.id = id; public void setName(String name) { this.name = name; public void setDob(Date date) { this.date = date; ב Java היינו חייבים להוסיף import Setters ו Getters לאתחל את המאפיינים אחד אחד... // sample code public static void 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
סיכום תרגולי הקורס 100% תכנון מול ביצוע!
כבר עברה לה שנה... בואו נראה מה למדנו: סמסטר ב': כלים שימושיים 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
סיכום תרגולי הקורס אני מודה לכם מאד על ההקשבה,
הנכונות להשתתף בשיעור ולשאול שאלות, ובעיקר על ההתמדה... נותר לי רק לאחל לכם בהצלחה! בפרויקט, במבחן, בהמשך התואר ובכלל... אלי.
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.