ChatGpt для Java программистов.

В этом посте я приведу пример, как можно использовать нейросеть ChatGpt для помощи в работе при написании Java кода. Я привел свои запросы и ответы с кодом от ChatGPt, оцените качество кода, который пишет бот.

@chatgpt – chatgpt ведет телеграм.

Работаем с  ChatGpt для написания  Java кода.

ChatGpt для Java программистов это не панацея, которая избавит вас от написания кода, это просто помощник, который может помочь быстро написать простые скрипты.

Мой диалог с ChatGpt для создания скриптов на Java:
Я: “напиши java-программу, которая запишет 220000000000 случайных байт в файл”.
Бот:
Вывод:

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Random;
 
public class WriteRandomBytes {
  public static void main(String[] args) {
    try {
      FileOutputStream fos = new FileOutputStream("random_bytes.bin");
      Random random = new Random();
      int numBytes = 220000000000;
      for (int i = 0; i < numBytes; i++) {
        fos.write(random.nextInt(256));
      }
      fos.close();
    } catch (IOException e) {
      System.out.println("An error occurred while writing to the file.");
      e.printStackTrace();
    }
  }
}

Не самый эффективный код и ChatGpt не использует try-with-resources, но вполне пригодный скрипт для этой задачи. ChatGpt также не заметил, что число вышло за пределы диапазона для int.

Я: можешь ли ты переписать код, чтобы он использовал try-with-resources

Бот: Конечно, вот обновленный код, в котором используется оператор try-with-resources:
Вывод:

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Random;
 
public class WriteRandomBytes {
  public static void main(String[] args) {
    long numBytes = 220000000000L;
    try (FileOutputStream fos = new FileOutputStream("random_bytes.bin")) {
      Random random = new Random();
      for (long i = 0; i < numBytes; i++) {
        fos.write(random.nextInt(256));
      }
    } catch (IOException e) {
      System.out.println("An error occurred while writing to the file.");
      e.printStackTrace();
    }
  }
}

Я: добавь BufferedOutputStream, чтобы сделать код более эффективным

Бот: Вот обновленный код, который использует BufferedOutputStream для повышения производительности:
Вывод:

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Random;
 
public class WriteRandomBytes {
  public static void main(String[] args) {
    long numBytes = 220000000000L;
    try (BufferedOutputStream bos = new BufferedOutputStream(
          new FileOutputStream("random_bytes.bin"))) {
      Random random = new Random();
      for (long i = 0; i < numBytes; i++) {
        bos.write(random.nextInt(256));
      }
    } catch (IOException e) {
      System.out.println("An error occurred while writing to the file.");
      e.printStackTrace();
    }
  }
}

Класс BufferedOutputStream предоставляет буфер, который помогает уменьшить количество низкоуровневых операций записи, выполняемых на базовом FileOutputStream. Это может привести к повышению производительности за счет уменьшения количества операций ввода-вывода на диск.

Что произойдет, если попросить ChatGpt использовать отступы Allman?

Ответ ChatGpt:

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Random;
 
public class WriteRandomBytes
{
    public static void main(String[] args)
    {
        long numBytes = 220000000000L;
        try (BufferedOutputStream bos = new BufferedOutputStream(
                new FileOutputStream("random_bytes.bin")))
        {
            Random random = new Random();
            for (long i = 0; i < numBytes; i++)
            {
                bos.write(random.nextInt(256));
            }
        }
        catch (IOException e)
        {
            System.out.println("An error occurred while writing to the file.");
            e.printStackTrace();
        }
    }
}

Я: сделать “random” статическим членом класса

Бот:
Чтобы сделать экземпляр Random статическим конечным членом класса, вы можете объявить его как приватное статическое поле в классе WriteRandomBytes. Вот измененный код:

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Random;
 
public class WriteRandomBytes {
    private static final Random RANDOM = new Random();
 
    public static void main(String[] args) {
        long numBytes = 220000000000L;
        try (BufferedOutputStream bos = new BufferedOutputStream(
                new FileOutputStream("random_bytes.bin"))) {
            for (long i = 0; i < numBytes; i++) {
                bos.write(RANDOM.nextInt(256));
            }
        } catch (IOException e) {
            System.out.println("An error occurred while writing to the file.");
            e.printStackTrace();
        }
    }
}

Я: ChatGpt, используй константу для хранения имени файла

Бот:
Чтобы использовать константу для хранения имени файла, вы можете объявить private static final string  в классе WriteRandomBytes и инициализировать его именем файла. Вот измененный код:

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Random;
 
public class WriteRandomBytes {
    private static final Random RANDOM = new Random();
    private static final String FILE_NAME = "random_bytes.bin";
 
    public static void main(String[] args) {
        long numBytes = 220000000000L;
        try (BufferedOutputStream bos = new BufferedOutputStream(
                new FileOutputStream(FILE_NAME))) {
            for (long i = 0; i < numBytes; i++) {
                bos.write(RANDOM.nextInt(256));
            }
        } catch (IOException e) {
            System.out.println("An error occurred while writing to the file.");
            e.printStackTrace();
        }
    }
}

Я: сделай “numBytes” константой

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Random;
 
public class WriteRandomBytes
{
    private static final Random RANDOM = new Random();
    private static final String FILE_NAME = "random_bytes.bin";
    private static final long NUM_BYTES = 220000000000L;
 
    public static void main(String[] args)
    {
        try (BufferedOutputStream bos = new BufferedOutputStream(
                new FileOutputStream(FILE_NAME)))
        {
            for (long i = 0; i < NUM_BYTES; i++)
            {
                bos.write(RANDOM.nextInt(256));
            }
        }
        catch (IOException e)
        {
            System.out.println("An error occurred while writing to the file.");
            e.printStackTrace();
        }
    }
}

я: вставь подчеркивания в числовую константу в качестве разделителя

Бот:
Чтобы сделать long числовую константу более удобной для чтения, можно использовать подчеркивания в качестве разделителей для разделения групп цифр. Вот модифицированный код класса WriteRandomBytes с подчеркиваниями в константе NUM_BYTES:

public class WriteRandomBytes {
    private static final Random RANDOM = new Random();
    private static final String FILE_NAME = "random_bytes.bin";
    private static final long NUM_BYTES = 220_000_000_000L;
 
    public static void main(String[] args) {
 ...

Я: ChatGpt, измени имя файла, чтобы оно включало текущую отметку даты-времени

Бот:
Чтобы модифицировать константу FILE_NAME для включения текущего времени, вы можете использовать пакет java.time для получения текущей даты и времени, форматирования ее в строку и объединения с именем файла. Вот измененный код класса WriteRandomBytes, в котором в имени файла указывается штамп времени:

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Random;
 
public class WriteRandomBytes {
    private static final Random RANDOM = new Random();
    private static final String FILE_NAME = "random_bytes_" + getDateTimeStamp()
        + ".bin";
    private static final long NUM_BYTES = 220_000_000_000L;
 
    public static void main(String[] args) {
        try (BufferedOutputStream bos = new BufferedOutputStream(
                new FileOutputStream(FILE_NAME))) {
            for (long i = 0; i < NUM_BYTES; i++) {
                bos.write(RANDOM.nextInt(256));
            }
        } catch (IOException e) {
            System.out.println("An error occurred while writing to the file.");
            e.printStackTrace();
        }
    }
 
    private static String getDateTimeStamp() {
        LocalDateTime now = LocalDateTime.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
            "yyyyMMdd_HHmmss");
        return now.format(formatter);
    }
}

В этом модифицированном коде Java от ChatGot константа FILE_NAME установлена в значение “random_bytes_” + getDateTimeStamp() + “.bin”. Метод getDateTimeStamp() использует класс LocalDateTime для получения текущей даты и времени, форматирует их в строку с помощью класса DateTimeFormatter и возвращает отформатированную строку. Шаблон DateTimeFormatter “yyyyMMdd_HHmmss” форматирует дату и время в строку с годом, месяцем и днем, за которыми следуют час, минута и секунда, разделенные символами подчеркивания. Отформатированная строка даты и времени затем объединяется с именем файла и расширением файла для создания полного имени файла.

Я: Напиши пример Java-контроллера с использованием Spring Framework

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.ui.Model;
 
@Controller
public class GreetingController {
    @GetMapping("/greeting")
    public String greeting(@RequestParam(name="name", required=false, defaultValue="World") String name, Model model) {
        model.addAttribute("name", name);
        return "greeting";
    }
}

Я: Chatgpt, нужно реализовать спецификацию OpenAPI с помощью этого контроллера вместо добавления аннотаций к контроллеру

openapi: 3.0.0
info:
  title: Greeting API
  version: 1.0.0
paths:
  /greeting:
    get:
      operationId: greeting
      parameters:
        - name: name
          in: query
          schema:
            type: string
          required: false
          description: The name of the person to greet. Defaults to "World".
      responses:
        '200':
          description: OK
          content:
            text/plain:
              schema:
                type: string
      tags:
        - Greetings

Это были мои запросы Chatgpt для написания Java кода. Как вам код?

Напишите в комментариях код, который Chatgpt написал для вас.

+1
4
+1
11
+1
2
+1
1
+1
3

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *