<commit_before>#Builder example

Haremos lo siguiente:

1. Crearemos una clase llamada `Person` con las siguientes propiedades y metodos.
```
public class Person {

    private String firstName;
    private String lastName;
    private String address;
    private Integer phone;
    private String email;

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public String getAddress() {
        return address;
    }

    public Integer getPhone() {
        return phone;
    }

    public String getEmail() {
        return email;
    }

    public Person(PersonBuilder build) {
        this.firstName = build.firstName;
        this.lastName = build.lastName;
        this.address = build.address;
        this.phone = build.phone;
        this.email = build.email;
    }
}
```


2. Vamos a crear una clase estática anidada (será la clase Builder). Vamos a seguir las convenciones de nombres, asi que si el nombre de nuestra clase es `Person` la clase Builder se llamará `PersonBuilder`.
..* La clase builder deberá tener un constructor público.
..* La clase builder deberá tener metodos para definir las propiedades del objeto y `retornar la clase builder`.
..* El paso final sera definir un método `build()` en la clase builder que retornará el objeto que el programa necesita. Para esto necesitaremos un constructor privado en la clase `Person` recibiendo un objeto tipo `PersonBuilder`.


```
public class Person {

    private String firstName;
    private String lastName;
    private String address;
    private Integer phone;
    private String email;

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public String getAddress() {
        return address;
    }

    public Integer getPhone() {
        return phone;
    }

    public String getEmail() {
        return email;
    }

    public Person(PersonBuilder build) {
        this.firstName = build.firstName;
        this.lastName = build.lastName;
        this.address = build.address;
        this.phone = build.phone;
        this.email = build.email;
    }

public static class PersonBuilder {

    private String firstName;
    private String lastName;
    private String address;
    private Integer phone;
    private String email;

    public PersonBuilder(){
    }

    public PersonBuilder setFirstName(String firstName) {
        this.firstName = firstName;
        return this;
    }

    public PersonBuilder setLastName(String lastName) {
        this.lastName = lastName;
        return this;
    }

    public PersonBuilder setAddress(String address) {
        this.address = address;
        return this;
    }

    public PersonBuilder setPhone(Integer phone) {
        this.phone = phone;
        return this;
    }

    public PersonBuilder setEmail(String email) {
        this.email = email;
        return this;
    }

    public Person build(){
        return new Person(this);
    }

  }

}
```


<commit_msg>builder readme<commit_after>#Builder example

Haremos lo siguiente:

1. Crearemos una clase llamada `Person` con las siguientes propiedades y metodos.
```
public class Person {

    private String firstName;
    private String lastName;
    private String address;
    private Integer phone;
    private String email;

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public String getAddress() {
        return address;
    }

    public Integer getPhone() {
        return phone;
    }

    public String getEmail() {
        return email;
    }

    public Person(PersonBuilder build) {
        this.firstName = build.firstName;
        this.lastName = build.lastName;
        this.address = build.address;
        this.phone = build.phone;
        this.email = build.email;
    }
}
```


2. Vamos a crear una clase estática anidada (será la clase Builder). Vamos a seguir las convenciones de nombres, asi que si el nombre de nuestra clase es `Person` la clase Builder se llamará `PersonBuilder`.
* La clase builder deberá tener un constructor público.
* La clase builder deberá tener metodos para definir las propiedades del objeto y `retornar la clase builder`.
* El paso final sera definir un método `build()` en la clase builder que retornará el objeto que el programa necesita. Para esto necesitaremos un constructor privado en la clase `Person` recibiendo un objeto tipo `PersonBuilder`.


```
public class Person {

    private String firstName;
    private String lastName;
    private String address;
    private Integer phone;
    private String email;

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public String getAddress() {
        return address;
    }

    public Integer getPhone() {
        return phone;
    }

    public String getEmail() {
        return email;
    }

    public Person(PersonBuilder build) {
        this.firstName = build.firstName;
        this.lastName = build.lastName;
        this.address = build.address;
        this.phone = build.phone;
        this.email = build.email;
    }

public static class PersonBuilder {

    private String firstName;
    private String lastName;
    private String address;
    private Integer phone;
    private String email;

    public PersonBuilder(){
    }

    public PersonBuilder setFirstName(String firstName) {
        this.firstName = firstName;
        return this;
    }

    public PersonBuilder setLastName(String lastName) {
        this.lastName = lastName;
        return this;
    }

    public PersonBuilder setAddress(String address) {
        this.address = address;
        return this;
    }

    public PersonBuilder setPhone(Integer phone) {
        this.phone = phone;
        return this;
    }

    public PersonBuilder setEmail(String email) {
        this.email = email;
        return this;
    }

    public Person build(){
        return new Person(this);
    }

  }

}
```



{'fraction_non_alphanumeric': 0.0719049943061656, 'fraction_numerical': 0.0006507239303725395, 'mean_word_length': 2.4617117117117115, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1847471', 'n_tokens_mistral': 1734, 'n_tokens_neox': 1670, 'n_words': 583}