рдЧреНрд░реВрд╡реА рдкреНрд░реЗрд░рдгрд╛ - рдЕрдВрддрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ

рдЫрд╡рд┐

рдХреНрдпреЛрдВ рдЧреНрд░реЛрд╡реА



рдПрдХ рдЬрд╛рд╡рд╛ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рдЕрдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рджреЗрдЦрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИред рдореЗрд░реЗ рдХреБрдЫ рдорд┐рддреНрд░, рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдПрдХ рд╕рдордп рдореЗрдВ рдЬрд╛рд╡рд╛ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдиреЗ рдХрд╛ рдХреЛрдИ рдЕрдиреБрднрд╡ рдирд╣реАрдВ рдерд╛, рдХреНрд░рдорд╢рдГ, рд░реВрдмреА (рд░реЗрд▓реНрд╕) рдкрд░ рдЪрд▓рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛, рдХреНрд░рдорд╢рдГ рд░реВрдмреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдХреЛрдИ рдФрд░ рдЗрд╕реЗ Django рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЖрд╡реЗрджрди рдХреЗ рд╕рд╛рде рдкрд╛рдпрдерди рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИред рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЧрддрд┐рд╢реАрд▓ рднрд╛рд╖рд╛рдУрдВ рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдХреИрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рдкреБрд╕реНрддрдХреЗрдВ рд╣реИрдВред рдХреНрдпрд╛ рдХреБрдЫ рд╣рдореЗрдВ рд░реЛрдХ рд╕рдХрддрд╛ рд╣реИ?



рдРрд╕рд╛ рд╣реБрдЖ рдХрд┐ рдЗрддрдиреЗ рд▓рдВрдмреЗ рд╕рдордп рдкрд╣рд▓реЗ рдореИрдВ рдЕрдкрдиреЗ рд╕рд╛рдереА рдХреЗ рдмрдЧрд▓ рдореЗрдВ рдПрдХ рдХреБрд░реНрд╕реА рд╕реЗ рд░реВрдмреА рдФрд░ рд░реЗрд▓ рдкрд░ рд╡рд┐рдХрд╛рд╕ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реБрдЖ рдерд╛ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЦреБрдж рдХреЛ рдХреБрдЫ рднреА рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрднреА-рдХрднреА рдЬрд╛рд╡рд╛ рд╢реИрд▓реА рдХреА рдЖрд▓реЛрдЪрдирд╛ рднреА рд╕реБрдирддрд╛ рдерд╛ред рдирддреАрдЬрддрди, рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдпрд╛ рд╕реМрднрд╛рдЧреНрдп рд╕реЗ рдЕрднреА рддрдХ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдлрдВрд╕ рдирд╣реАрдВ рдЧрдпрд╛ред рдлрд┐рд░ рднреА, рдореИрдВ рдХреБрдЫ рдорд╛рдирдХреЛрдВ рд╕реЗ, рд╢рд╛рдпрдж, рдмрд╣реБрдд рдмрдбрд╝рд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдореЗрд░реЗ рд▓рд┐рдП рдореБрдЦреНрдп рдмрд╛рдд рдЬрд╛рд╡рд╛ рдХреЗ рд╕рд╛рде рд▓рдЧрднрдЧ 3 рд╕рд╛рд▓ рдХрд╛ рдЕрдиреБрднрд╡ рдерд╛ред рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдореИрдВ рдЖрд╕рд╛рдиреА рд╕реЗ AS3 / Flex рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдореЗрдВ рдмрд┐рддрд╛рдП рд╕рдордп рдХреЗ рдХрд╛рдлреА рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓рд╛рдирдд рджреЗ рд╕рдХрддрд╛ рд╣реВрдВ, рдЬрд┐рдирдХреЗ рдШрдЯрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рд╡реАрдбрд┐рдпреЛ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЖрд╡реЗрджрди рд▓рд┐рдЦрддреЗ рд╕рдордп рдЕрднрд┐рдиреНрди рдереЗред рд▓реЗрдХрд┐рди, рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рдЕрднреНрдпрд╛рд╕ рдЦрддреНрдо рд╣реЛ рдЧрдпрд╛ рд╣реИред

рдЗрд╕ рд╕рдкреНрддрд╛рд╣рд╛рдВрдд рдореИрдВ рдЧреНрд░реВрд╡реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд▓реЗрдЦ рдЖрдпрд╛, рдореБрдЭреЗ рдЕрднреА рдпрд╛рдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдм рдХреИрд╕реЗ рд╢реБрд░реВ рд╣реБрдЖред рдЙрд╕рдХреЗ рдмрд╛рдж, рдХреБрдЫ рд░рд┐рдХреЙрд░реНрдб рдХрд┐рдП рдЧрдП рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕ рдмрд╛рд░ рдЧреНрд░реВрд╡реА рдиреЗ рдореБрдЭреЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдкреА рджрд┐рдЦрд╛рдИред рднрд╛рд╖рд╛ рдЬрд╛рд╡рд╛ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рдЧрдИ рд╣реИ рдФрд░ рдЬреЗрд╡реАрдПрдо рдореЗрдВ рдЪрд▓ рд░рд╣реА рдЕрдиреНрдп, рдЧрддрд┐рд╢реАрд▓ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИред рдмреЗрд╢рдХ, рдореИрдВ рдЕрдкрдиреЗ рдкрд░рд┐рдЪрд┐рдд рднрд╛рд╖рд╛ рдореЗрдВ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд░рд▓ рдПрдХреАрдХрд░рдг рд╕реЗ рдкреНрд░рд╕рдиреНрди рдерд╛, рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬреНрдЮрд╛рдд рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛, рдУрдПрд╕рдЬреАрдЖрдИ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ - рдпрд╣ рд╕рдм рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрдЭреЗ рдЬрд╛рд╡рд╛ рджреБрдирд┐рдпрд╛ рдЫреЛрдбрд╝рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрддрд╛ рд╣реИред

рдареАрдХ рд╣реИ, рдкрд░реНрдпрд╛рдкреНрдд рдкрд╛рдиреА, рдЕрдиреНрдпрдерд╛ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдлреА рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рдореИрдВ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рд╡реНрдпрд╡рд╕рд╛рдп рдореЗрдВ рдЙрддрд░ рдЧрдпрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рдЧреНрд░реВрд╡реА рд╕реЗ рдХреНрдпреЛрдВ рдкреНрд░реЗрд░рд┐рдд рдерд╛, рдПрдХ рднреНрд░рдордг рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд┐рдЫрд▓реЗ рд╕рдкреНрддрд╛рд╣рд╛рдВрдд рдореЗрдВ рдореЗрд░реА рдореБрдЦреНрдп рдЧрддрд┐рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдерд╛ред



рдЬрд╛рд╡рд╛рдмреАрди рдФрд░ рдЧреНрд░реВрд╡реА



рдЬрд╛рд╡рд╛ рдХрд╛ рдереЛрдбрд╝рд╛ рд╕рд╛ рд╕реАрдЦрдиреЗ рдФрд░ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рдЬрд╛рдирдиреЗ рдХреЗ рдмрд╛рдж, рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдХрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рдпреЗ рджреЛрдиреЛрдВ рдХреНрд░рд┐рдпрд╛рдПрдВ рдкреВрд░реА рд╣реЛ рдЧрдИ рд╣реИрдВ, рд╣рдо рдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛ рдЬрд╛рд╡рд╛рдмреАрди рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ - рд╡рд░реНрдЧ рдлрд╝реАрд▓реНрдб рдмрдирд╛рдирд╛ рдФрд░ "рдкрд╕рдВрджреАрджрд╛" рдЧреЗрдЯрд░реНрд╕ / рд╕реЗрдЯрд░ рдЬрдирд░реЗрдЯ рдХрд░рдирд╛ред рдЗрд╕рдХреЗ рд▓рд┐рдП IDE рдореЗрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ HotKey рдиреЗ рднреА рдХрд┐рдпрд╛ред рдиреАрдЪреЗ рдЬрд╛рд╡рд╛ рдФрд░ рдЧреНрд░реВрд╡реА рдореЗрдВ рдХреНрд░рдорд╢рдГ рдЬрд╛рд╡рд╛рдмреАрди рд╣реИред

//Java

import java.util.Date;



public class Employee {

private String firstName;

private String lastName;

private Date dateSince;



public String getFirstName() {

return firstName;

}



public void setFirstName(String firstName) {

this.firstName = firstName;

}



public String getLastName() {

return lastName;

}



public void setLastName(String lastName) {

this.lastName = lastName;

}



public Date getDateSince() {

return dateSince;

}



public void setDateSince(Date dateSince) {

this.dateSince = dateSince;

}

}







//Groovy

class Employee {

String firstName

String lastName

Date dateSince

}







рдпрд╣ Groovy рдореЗрдВ рдЬрд╛рд╡рд╛ рдмрдирд╛рдо 5 рдореЗрдВ 31 рд▓рд╛рдЗрдиреЗрдВ рдирд┐рдХрд▓рд╛ред

рдФрд░ рдпрд╣ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рд╣реИ, рдЧреНрд░реВрд╡реА рдореЗрдВ рд▓реЗрдЦрди рдЬреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ:

def e = new Employee(firstName:'Ivan', lastName:'Petrov')







рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдирд┐рдЬреА рдХрд╣рд╛рдВ рд╣реИ рдпрд╛ рдХрд┐ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕реНрдерд┐рддрд┐ (-рд╕реЗрдЯрд░ + рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░) рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрд╢рд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ? рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ @Immutable



рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рд╣рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИ

import groovy.lang.Immutable;



@Immutable class Employee {

String firstName

String lastName

Date dateSince

}







рдЕрдкрд╡рд╛рдж



рдЗрд╕ рд╡рд┐рд╖рдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдЖрдк рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдмрд╣рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ... рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рд╡рд╛ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдЪреЗрдХ (рдЪреЗрдХ) рдФрд░ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд (рдЕрд╕рддреНрдпрд╛рдкрд┐рдд) рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЧреНрд░реВрд╡реА рдореЗрдВ, рд╕рднреА рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдард╣рд░рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН, рдХреЛрдИ рднреА рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдЬрдм рдЖрдк рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗ рдпрд╛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╣реАрдВ рдКрдкрд░ рд╣реЛрдЧрд╛ред рдпрд╣рд╛рдВ рдЖрдк рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдЦрд┐рд░ рд╣рдо рдмрдЪреНрдЪреЗ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рд╡рд╛рд░реНрдбрд░ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди, рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдХреЛрдИ рднреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдпрд╛ рдХреЛрдб рдХреЛ рдкрдХрдбрд╝рдиреЗ / рдмреНрд▓реЙрдХ рдореЗрдВ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред



рдкреНрд░рддрд┐рдирд┐рдзрд┐рдордВрдбрд▓



рдХреЛрдб рдХреЛ рдЫреЛрдЯрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЕрдХреНрд╕рд░ рдХрдВрдЯреЗрдирд░ рдХреНрд▓рд╛рд╕ рд╕реЗ рд╣рдорд╛рд░реЗ рдПрдХ рдпрд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдлрд╝реАрд▓реНрдбреНрд╕ рдкрд░ рдкреБрд░реНрдирдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдЬреЛ рдереЛрдбрд╝рд╛ рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рдФрд░ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реЛрддрд╛ рд╣реИред

рдиреАрдЪреЗ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИред



import java.text.SimpleDateFormat



class Event {

@Delegate Date when

String title, url

}



def df = new SimpleDateFormat("yyyy/MM/dd")



def gr8conf = new Event(title: "GR8 Conference",

url: "http://www.gr8conf.org",

when: df.parse("2009/05/18"))

def javaOne = new Event(title: "JavaOne",

url: "http://java.sun.com/javaone/",

when: df.parse("2009/06/02"))



assert gr8conf.before(javaOne.when)








рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдм рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рджрд┐рдирд╛рдВрдХ рд╡рд░реНрдЧ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреЛрдб рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реБрдП рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ gr8conf.before(javaOne.when)



рдХрд╛рдлреА рддрд╛рд░реНрдХрд┐рдХ рд▓рдЧрддреА рд╣реИред

рдЙрджрд╛рд╣рд░рдг, рдмреЗрд╢рдХ, рдмрд╣реБрдд рдЖрджрд┐рдо рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ рдЕрдкрдиреЗ рд╕рд┐рд░ рдХреЛ рдЙрди рдХреНрд╖рдгреЛрдВ рдореЗрдВ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдЙрд╕рдХреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред



рдмрдВрдж (рдмрдВрдж)



рдЬрд╛рд╡рд╛ рдореЗрдВ рдХреЛрдИ рдХреНрд▓реЛрдЬрд░ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдЬрдм рдЖрдк рдпреЛрдЬрдирд╛рдмрджреНрдз рдпрд╛ рдлрд┐рд░ рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддреЗ рдХрд┐ рд╡реЗ рдЬрд╛рд╡рд╛ 8 рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗред рдЧреНрд░реВрд╡реА рдореЗрдВ, рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЕрдм рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдпрд╣рд╛рдВ рдмрд╣реБрдд рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╖рдп рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╕рд┐рд░реНрдл рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ рдХрд┐ рдХреЛрдб рдХреЛ рдХреИрд╕реЗ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛рдПред



рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╢реНрд░рдорд┐рдХреЛрдВ (рдХрд░реНрдордЪрд╛рд░реА) рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ, рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рдмрд╕реЗрдЯ рд╕реЗ рдЪреБрдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЪрдпрди рдорд╛рдирджрдВрдб рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ: рдпрд╣ рдПрдХ рд╡реЗрддрди, рдЖрдпреБ рдпрд╛ рд╡рд┐рднрд╛рдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред



List getStaffWithMuchSalaryThan(List staff, double salary);

List getStaffYoungerThan(List staff, int age);

List getStaffByDepartment(List staff, Dept dept);









рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рд▓рдЧрднрдЧ рдПрдХ рд╣реА рддрд░реНрдХ рд╣реИ: рд╣рдо рдЪрдХреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рд╢рд░реНрддреЛрдВ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдпрд╣ рд╕рдВрддреБрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рдкрд░рд┐рдгрд╛рдореА рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВред

рдпрд╣реА рд╣реИ, рдЬрд╛рд╡рд╛ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдлреЙрд░реНрдо рдХреЗ рддреАрди рддрд░реАрдХреЗ рд╣реИрдВ:



рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реВрдЪреА getStaffWithMuchSalaryThan (рд╕реВрдЪреА рдХрд░реНрдордЪрд╛рд░реА, рджреЛрд╣рд░рд╛ рд╡реЗрддрди) {

рд╕реВрдЪреА рдкрд░рд┐рдгрд╛рдо = рдирдпрд╛ ArrayList ();

рдХреЗ рд▓рд┐рдП (рдХрд░реНрдордЪрд╛рд░реА рдИ: рдХрд░реНрдордЪрд╛рд░реА) {

if (e.getSalary ()> = рд╡реЗрддрди) {

result.add (e);

}

}

рд╡рд╛рдкрд╕реА рдкрд░рд┐рдгрд╛рдо;

}



рдФрд░ рдЗрд╕рд▓рд┐рдП рдЙрдкрд░реЛрдХреНрдд рджреЛ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдПред рдмреЗрд╢рдХ, рд░рдгрдиреАрддрд┐ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдбрд┐рдЬрд╝рд╛рдЗрди рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд▓рд╛рдЗрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛рдлреА рдмрдбрд╝реА рд░рд╣реЗрдЧреАред



рдЕрдм рдХреНрд▓реЛрдЬрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╣реА рдмрд╛рдд рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред



//

def staff = [

new Employee(firstName: 'A', salary:500, age:20, dept:'K'),

new Employee(firstName: 'B', salary:700, age:30, dept:'K'),

new Employee(firstName: 'C', salary:1000, age:25, dept:'A2') ]



//

def getStaffWithCriteria(staff, criteria) {

result = []

for(e in staff) {

if(criteria(e)) result.add(e)

}

result

}



println getStaffWithCriteria(staff, {e -> e.salary > 600}) // 600

println getStaffWithCriteria(staff, {e -> e.age < 27}) //, 27

println getStaffWithCriteria(staff, {e -> e.dept == 'K'}) // K








// UPD: рдФрд░ рдПрдХ рдмрд╛рдЗрдХ рдХреЗ рдмрд┐рдирд╛ рднреА, рдХреЛрдб рд╕рд░рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:



Println staff.grep {e -> e.salary> 600}

Println staff.grep {e -> e.age <27}

Println staff.grep {e -> e.dept == 'K'}



рдзрдиреНрдпрд╡рд╛рдж рдзрдиреНрдпрд╡рд╛рдж



рдкрд░рд┐рдгрд╛рдо:

[рдмреА, рд╕реА]

[рдП, рд╕реА]

[рдП, рдмреА]



рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ



рдЧреНрд░реВрд╡реА рдиреЗ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдмрдирд╛ рджрд┐рдпрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рдиреЗ рд╕реЗ рд▓реЗрдХрд░ рдЙрди рдкрд░ рдЪрд▓рдиреЗ рддрдХред



рдпрд╣ рдХрд╛рдлреА рддрд╛рд░реНрдХрд┐рдХ рд╣реИ:

def list = ['a', 'b', 'c']







рдЬрд╛рд╡рд╛ рдХреЛрдб рдХреЗ рдмрдЬрд╛рдп:



рд╕реВрдЪреА рд╕реВрдЪреА = рдирдпрд╛ ArrayList ();

list.add ("a");

list.add ("рдмреА");

list.add ("c");



рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

рдЬрд╛рд╡рд╛ рдореЗрдВ:

for(String s: list) {

System.out.println(s);

}







рдЧреНрд░реВрд╡реА рдореЗрдВ:

list.each {println it}







рдПрдХ рдЬрд╛рд╡рд╛ рд▓реВрдк рдЗрддрдирд╛ рдЖрдХрд░реНрд╖рдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдореЗрдВ рддрддреНрд╡ рд╕реВрдЪрдХрд╛рдВрдХ рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдлрд┐рд░ рдЖрдк рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдлреЙрд░реНрдо рдХреЗ рд▓реВрдк рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЪрд░ рдХреА рд╢реБрд░реБрдЖрдд рдХрд░рдХреЗ, рдЗрд╕рдХреЗ рд╕рд╛рде, рд▓реВрдк рдХреЗ рдЕрдВрджрд░ рдЙрд╕ рдкрд░ рд╡реЗрддрди рд╡реГрджреНрдзрд┐ рдСрдкрд░реЗрд╢рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

for (int i = 0; i < list.size(); i++) {

System.out.println(i + " - " + list.get(i));

}








рдЧреНрд░реВрд╡реА рдореЗрдВ, рдЗрд╕ рдХрд╛рд░реНрдп рдХрд╛ рдПрдХ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рднреА рд╣реИред



list.eachWithIndex {e, i -> println тАЬ${i} - ${e}тАЭ}







рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдмрд╛рд░ рд╕рднреА рдХреЛ рд╕реАрдорд╛рдВрдХрдХ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛, рдЗрд╕ рд╢рд░реНрдд рдХреЗ рд╕рд╛рде рдХрд┐ рдЕрдВрддрд┐рдо рддрддреНрд╡ рдХреЗ рдмрд╛рдж рдПрдХ рд╡рд┐рднрд╛рдЬрдХ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдЕрдм, рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдВрдЦ рдХрд╛рдЯрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рддрддреНрд╡ рдПрдХ рдЪрдХреНрд░ рдореЗрдВ рдЕрдВрддрд┐рдо рд╣реИред



рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЧреНрд░реВрд╡реА рдХреЛрдб рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╣реБрдд рд╕рд░рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ



list.join(', ')







рдПрдХ рд▓рд╛рдЗрди рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдЧрд╛: "рдП, рдмреА, рд╕реА"



рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЕрд╕реЗрдВрдмрд▓реА



рдЬрд┐рди рд▓реЛрдЧреЛрдВ рдХреЛ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдХреА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдмрдЬрд╛рдп рдЪреАрдВрдЯреА, рдорд╛рд╡реЗрди рдЬреИрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдЧреНрд░реИрдбрд▓ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдЬрд╛рд╡рд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдорд╛рд╡реЗрди рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдХрд╛рдлреА рдкреНрдпрд╛рд░ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдЧреНрд░реИрдбрд▓ рдореБрдЭреЗ рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рд▓рдЧрддреЗ рд╣реИрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдврд╛рдВрдЪреЗ рдореЗрдВ, рдЧреНрд░реИрдбрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдЪреНрдЫреА рдмрд╛рдд рдХрд╣реА рдЬрд╛ рд╕рдХрддреА рд╣реИред рд╡реИрд╕реЗ, рдХрд▓ 19 рджрд┐рд╕рдВрдмрд░ рдХреЛ рд╕рдВрд╕реНрдХрд░рдг 0.9 рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рдХрдИ рдмрджрд▓рд╛рд╡ рд╢рд╛рдорд┐рд▓ рдереЗред



рдирд┐рд╖реНрдХрд░реНрд╖



рдмреЗрд╢рдХ, рдпрд╣ рд▓реЗрдЦ рдЧреБрд░реБ рдХреЗ рд╣реБрдХреНрдо рдпрд╛ рдореБрдЦреНрдп рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ рд╣реЛрдиреЗ рдХрд╛ рдвреЛрдВрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЧреНрд░реВрд╡реА рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЕрдзрд┐рдХ рд╕рд┐рд░реНрдл рдирдП рдЕрдиреБрднрд╡реЛрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЗрд╕ рднрд╛рд╖рд╛ рдХреЗ рдЖрдЧреЗ рдХреЗ рдЕрдзреНрдпрдпрди рд╕реЗ рдЖрдкрдХреЛ рдЬрд╛рд╡рд╛ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХрд╛ рд╕рдорд░реНрдердХ рдмрдиреЗ рд░рд╣рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИ, рдЬрдмрдХрд┐ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЧреНрд░реВрд╡реА рд╕реЗ рдХрдИ рдЧрддрд┐рд╢реАрд▓ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЧреНрд░реВрд╡реА рдХреИрд╕реЗ рдХреЛрдб рдХреЛ рд╕рд░рд▓ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рдЫреЛрдЯрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдпрд╣рд╛рдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХреБрдЫ рдкрд╛рдардХ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рд░реБрдХреЗрдВрдЧреЗ рдФрд░ рдЗрд╕ рднрд╛рд╖рд╛ рджреНрд╡рд╛рд░рд╛ рдкреЗрд╢ рдХрд┐рдП рдЧрдП рдХрдИ рдЕрдиреНрдп рдЙрдкрд╣рд╛рд░реЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗред рдЕрдВрдд рдореЗрдВ, рдЖрдк рдЗрд╕ рддрдереНрдп рдкрд░ рдзреНрдпрд╛рди рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЧреНрд░реВрд╡реА рдПрдХ рдпреБрд╡рд╛ рднрд╛рд╖рд╛ рд╣реИ рдФрд░ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрд╕рдХреЗ рд╕рдореБрджрд╛рдп рджреНрд╡рд╛рд░рд╛ рдХрд╛рдлреА рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд╕реНрдкреНрд░рд┐рдВрдЧрд╕реЛрд░реНрд╕ рд╕реЗ рдирд┐рд╡реЗрд╢ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реЗрдм рдврд╛рдВрдЪрд╛ рдЧреНрд░реЗрд▓реНрд╕ рд╣реИред

рдореБрдЦреНрдп рд╕реНрд░реЛрдд


groovy.codehaus.org

www.infoq.com/pretations/Transforming-to-Groovy (рдЖрдк рдкреНрд░рд╕реНрддреБрддрд┐ рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдЖрдк рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╡реАрдбрд┐рдпреЛ рдкрд░ рдлреБрд▓рд╕реНрдХреНрд░реАрди рджрдмрд╛ рд╕рдХрддреЗ рд╣реИрдВ)

www.infoq.com/presentations/Industrial-Strength-Groovy

www.asert.com.au/pubs/Groovy/Groovy.pdf



All Articles