Повысьте точность и качество вашего кода

Раскрытие информации об искусственном интеллекте: эта статья была написана в соавторстве с искусственным интеллектом. Поскольку я не являюсь носителем английского языка, я использовал методы искусственного интеллекта (ИИ) для улучшения качества используемого языка, удобочитаемости текста и организации произведения в целом.

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

Но что, если мы скажем вам, что есть лучший способ? Способ, который может сэкономить ваше время и усилия и сделать процесс написания кода намного быстрее (и меньше работы)?

По названию статьи вы догадались: встречайте ChatGPT, модель обработки естественного языка (NLP), которая может генерировать код TypeScript из UML, используя всего несколько ключевых слов в качестве входных данных.

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

Как это работает

Одним из самых больших преимуществ использования ChatGPT для генерации кода является то, что он может понимать естественный язык. Это означает, что разработчики могут использовать простые и понятные инструкции для создания кода, а не писать код с нуля.

Этот подход также можно использовать для включения логики и других сложных функций в сгенерированный код, что делает его более мощным и универсальным. Я должен повторить этот момент: это означает, что мы можем поместить некоторые обычные замечания о функциональности ВНУТРИ формального описания UML. Это станет более ясным через минуту.

Давайте попробуем пример

С помощью plantuml я создал вот такую ​​диаграмму классов (да, это маленький игрушечный пример):

Теперь это на самом деле написано в коде следующим образом:

@startuml
'https://plantuml.com/class-diagram

abstract class Owner {
    wantToOwnSomething(Ownable ref)
}

class Guy extends Owner {}

interface Drivable
abstract class Car implements Drivable, Ownable {
    - brand

    + buy()
}

class VW extends Car {
    open()
    close()
}

interface Ownable {
    isOwnedBy(Owner ref)
}

Owner "1" *-- "many" Ownable : contains

@enduml

car.band is filled by constructor
Owner.wantToOwnSomething = Calls isOwnedBy on the passed reference and passes owner itself as parameter
VW.open -> logs the following output "The car of brand " BRAND "is open"
VW.close -> logs the following output "The car of brand " BRAND "is closed"

В частности, обратите внимание на части под enduml, которые больше не распознаются видимым выводом, но предназначены для предоставления подсказок ChatGPT при создании фактического кода. Таким образом, это способы описания поведения функции на «нормальном языке» (подсказка —> я думаю, что в какой-то момент мы можем проанализировать их непосредственно из билетов требований).

Теперь я дал ChatGPT задание сгенерировать из него код TypeScript. В итоге возникли 2 небольшие проблемы:

Который я исправил вручную примерно за 30 секунд. Затем я вручную добавил атрибут «имя» к типу владельца, потому что понял, что без него сложно тестировать.

Кроме того, под кодом ChatGPT сделал следующее заявление: «Также отсутствует реализация метода buy() в классе Car и логика, обеспечивающая, чтобы автомобиль мог принадлежать только одному владельцу».

Итак, он признал, что чего-то не хватает, но по какой-то причине не реализовал это.

В целом, это был общий результат (извините за длинный вывод, но я думаю, что важно видеть весь код в контексте):

/**
 * Abstract class representing an owner of an object
 */
abstract class Owner {
    public name: string;

    /**
     * Attempts to own an object
     * @param ref - The object being attempted to be owned
     */
    wantToOwnSomething(ref: Ownable) {
        ref.isOwnedBy(this);
    }
}

/**
 * Concrete class representing a specific type of owner
 */
class Guy extends Owner {
    constructor(public name: string) {
        super();
    }
}

/**
 * Interface representing something that can be driven
 */
interface Drivable {
    // Some method or property related to being drivable
}

/**
 * Abstract class representing a car which can be driven and owned
 */
abstract class Car implements Drivable, Ownable {
    brand: string; // filled by constructor

    /**
     * Buys the car
     */
    buy() {
        // some implementation
    }

    isOwnedBy(owner: Owner): void {
        console.log(`Car is owned by ${owner.name}`)
    }
}

/**
 * Concrete class representing a specific type of car
 */
class VW extends Car {
    constructor () {
        super();

        this.brand = "VW";
    }

    /**
     * Opens the car
     */
    open() {
        console.log(`The car of brand ${this.brand} is open`);
    }

    /**
     * Closes the car
     */
    close() {
        console.log(`The car of brand ${this.brand} is closed`);
    }
}

/**
 * Interface representing something that can be owned
 */
interface Ownable {
    /**
     * Checks if the object is owned by a specific owner
     * @param owner - The owner being checked
     */
    isOwnedBy(owner: Owner): void;
}


/**
This part below was added manually to execute the code
*/
const guy = new Guy("Jim");
const car =new VW();

guy.wantToOwnSomething(car);

car.open();

Заключение

Способность ChatGPT генерировать исходный код из UML — очень важный аспект разработки программного обеспечения в долгосрочной перспективе. Прямо сейчас в коде слишком много ошибок, чтобы надежно масштабировать его, но есть некоторые важные аспекты, которые здесь изменятся:

  1. Подсказки станут лучше. Подсказка — это реальная вещь, и я знаю, что моя подсказка была неоптимальной в отношении того, как я буду/буду писать ее через 6 месяцев или около того.
  2. Модели станут лучше
  3. Это будет объединено с текущим состоянием разработки на основе моделей.
  4. В будущем общие процессы будут усовершенствованы.

Для меня уже сейчас ясно, что эта технология может и будет экономить время и усилия разработчиков, а также повышать точность и качество их кода. Благодаря возможностям естественного языка он также может включать логику и другие сложные функции в сгенерированный код.

Я настоятельно рекомендую вам попробовать этот подход и поэкспериментировать с ним!

Использованная литература: