Рубрики
Без рубрики

Сравнение кода: Ruby, JavaScript и Java Заходят в панель…

После почти двух лет учебы и обучения я, наконец, начал чувствовать себя не так сильно, как “б”… С тегами java, javascript, ruby, для начинающих.

После почти двух лет учебы и обучения я, наконец, начал чувствовать себя не так сильно, как “новичок” или “новичок” в программировании. Я создал API-интерфейсы REST в Rails и Express, я создал приложения с полным стеком, используя современные платформы JavaScript, и я запрашивал базы данных, используя (различные варианты) SQL и GraphQL…

> И тогда я решил выучить Java

Внезапно я снова становлюсь новичком. Не совсем полный новичок, но определенно зеленый, и начало работы с Java было захватывающим опытом. Java выглядит так, как я всегда представлял программирование, в большей степени, чем когда-либо делали Ruby или JavaScript. Написание на строго типизированном языке было для меня почти совершенно новым, если не считать небольшого увлечения машинописью.

Мои Учебные Ресурсы

До сих пор меня больше всего удивляло в Java то, как мало я ее ненавижу. Это может показаться странным, но с учетом реакции, которую я получил, когда сказал людям: “Эй, я изучаю Java!” можно подумать, я решил продать душу своего первенца дьяволу компьютерных наук или что-то в этом роде. Но на самом деле это было не так уж плохо, слишком большой отход от того, что я уже знаю, или слишком большой барьер для входа.

Особенно замечательной особенностью Java является то, что, поскольку она настолько распространена, распространена и популярна, для ее изучения доступно множество ресурсов, и значительное количество из них являются бесплатными или очень доступными.

Два ресурса, которые я лично использовал, – это замечательный Курс программирования на Java от Энджи Джонс в Test Automation U и Путь обучения разработчиков Java в Академии JetBrains .

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

Программа Академии Jetbrains на удивление доступна по цене и является лучшим вариантом для людей, которые предпочитают более строгий курс и начинают с абсолютного нуля. Даже если у вас нет опыта программирования, вы можете адаптировать учебную программу Jetbrains к вашим потребностям. И если у вас есть предыдущий опыт изучения другого языка, вам предоставляется возможность пропустить разделы учебной программы, с которыми вы уже знакомы.

Хорошо, теперь давайте перейдем к учебнику…

Что я решил сделать с этим уроком, так это показать вам, как кодировать что-то довольно простое, и сравнить решения бок о бок в Ruby, JavaScript и Java. Мне нравится делать это, когда я учусь (кодирую то же самое, что я изучаю на языках, с которыми мне уже комфортно), потому что это хорошее упражнение, чтобы увидеть, как вещи переводятся . Точно так же, как если бы вы переводили предложение на другой язык, вы бы уже хотели знать, как должно быть структурировано предложение на вашем родном языке, прежде чем пытаться выполнить перевод.

Итак, сегодня мы напишем короткую программу для расчета количества, необходимого для приготовления определенного количества кофе. (Понял? Ява? Джетбрейнс тоже сделал эту шутку, не @me, лол)

То, что мы знаем, нам нужно:

  • 20 г кофе на чашку
  • 14 унций воды на чашку

Мы будем ограничиваться только этими двумя переменными, чтобы все было как можно проще. Наша единственная неизвестная переменная – это количество чашек кофе, которые мы хотим приготовить. Это будет то, что мы передадим функции/методу в качестве параметра/аргумента.

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

Вот как мы могли бы написать это на Ruby…

# main.rb

# set up a coffee maker class
class CoffeeMaker

  # variables for the amount of coffee and water per cup can only be read
  attr_reader :coffeeGramsPerCup, :waterOzPerCup
  # cupsToMake can be altered as needed
  attr_accessor :cupsToMake

  # class initializer takes in the quantity of coffee to make
  def initialize(cupsToMake)
    @coffeeGramsPerCup = 20
    @waterOzPerCup = 14
    @cupsToMake = cupsToMake
  end

  # a method that calculates the quantities needed and outputs a string to the console
  def makeCoffee
    waterNeeded = @waterOzPerCup * @cupsToMake
    coffeeNeeded = @coffeeGramsPerCup * @cupsToMake

    print "You will need #{waterNeeded} oz of water and #{coffeeNeeded} grams of coffee beans \nto make #{@cupsToMake} cups of coffee."
  end

end

# initialize a coffee maker and call the makeCoffee method
# passing it the quantity of coffee we'd like to make
myOrder = CoffeeMaker.new(5)
myOrder.makeCoffee

# Console Output:
# > You will need 70 oz of water and 100 grams of coffee to make 5 cups of coffee.

Ruby является отличным кандидатом для сравнения с Java, потому что он также является Объектно-ориентированным языком и позволяет нам обрабатывать вещи очень похожими способами.

В приведенном выше примере мы создали класс с именем Кофеварка и дали ему переменные класса для обработки того, что мы уже знаем (количество кофе и воды, необходимых для чашки), и мы инициализируем экземпляр класса с количеством чашек кофе, которые мы хотели бы приготовить. Затем мы вызываем метод сделать кофе , который вычисляет ваши потребности в кофе и воде и выводит результат на консоль.

И теперь мы можем попробовать это в JavaScript…

// index.js

// global variables for coffee and water
const COFFEE = 20;
const WATER = 14;

// create our coffeeMaker function, where n is the requested number of cups
function coffeeMaker(n) {
  let coffeeNeeded = n * COFFEE;
  let waterNeeded = n * WATER;

  console.log(
    `You will need ${waterNeeded} oz. of water and ${coffeeNeeded} grams of coffee, to make ${n} cups of coffee.`
  );
};

// call our coffeeMaker function
coffeeMaker(5);

// Console Output:
// > You will need 70 oz of water and 100 grams of coffee to make 5 cups of coffee.

Это выглядит немного более обтекаемым! Поскольку JavaScript по умолчанию не является объектно-ориентированным языком, мы можем просто объявить некоторые глобальные переменные, написать функцию, вызвать функцию и завершить ее. Мы также могли бы вызвать эту функцию из в любом месте мы хотим, пока мы экспорт оно и требовать файл, содержащий его, независимо от того, действительно ли то, что мы пишем, имеет какое-либо отношение к приготовлению кофе.

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

В версии Ruby мы создали переменную, содержащую нашу инициализацию заказа кофе, Мой заказ . Если в итоге нам понадобится другое количество кофе, мы можем просто переназначить значение чашки для приготовления , вызвав метод настройки Мой заказ . Затем мы можем приготовить кофе снова, без инициализации новой кофеварки.

И, наконец, вот как я написал это на Java…

public class CoffeeMaker {

  // private class 'fields', so they cannot be altered
    private int coffeePerCup = 20;
    private int waterPerCup = 14;
    // cupsToMake is a 'public' variable so we get a 'setter' method
    public int cupsToMake;

    // initialize class with number of cups of coffee requested
    public CoffeeMaker(int cupsToMake) {
        this.cupsToMake = cupsToMake;
    }

    // method to make coffee
    public void makeCoffee() {
        int coffeeNeeded = coffeePerCup * cupsToMake;
        int waterNeeded = waterPerCup * cupsToMake;

        System.out.println("You will need " + waterNeeded + " oz. of water and " + coffeeNeeded + " grams of coffee beans to make " + cupsToMake + " cups of coffee.");
    }

    public static void main(String[] args) {
        // Yep! we're initializing an instance of the class inside the class itself!
        CoffeeMaker myOrder = new CoffeeMaker(5);
        myOrder.makeCoffee();

        // Console Output
        // > You will need 70 oz of water and 100 grams of coffee to make 5 cups of coffee.
    }

}

Этот подход довольно похож на Ruby, и я надеюсь Я написал их таким образом, чтобы вы могли увидеть сходство между двумя блоками кода.

У нас есть некоторые переменные уровня класса, которые являются постоянными и неизменяемыми (для их изменения нет метода “setter”), и у нас есть наш public чашки, чтобы сделать переменной, которую можно обновлять по мере необходимости.

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

Преимущества объектно-ориентированного подхода одинаковы для всех языков OO. Я нахожу привлекательной возможность повторного использования классов и экземпляров классов. Мне нравится иметь возможность сказать: “Хорошо, вот мой пример класс и теперь я собираюсь сделать X Y Z к только этому экземпляру”.

Я надеюсь, что эта странная возня с каким-то кодом Ruby/JavaScript/Java была забавной для кого-то, кроме меня! Я надеюсь, что это побудит некоторых людей, которые могут опасаться Java, попробовать. Это не так страшно, как кажется на первый взгляд, и может быть действительно доступным, если вы выберете правильные инструменты обучения.

И если вы разработчик Java, который смотрит на это и рвет на себе волосы, ПОЖАЛУЙСТА, ДАЙТЕ МНЕ ЗНАТЬ! Моя цель – просто продолжать совершенствоваться, поэтому я приму любые советы или узнаю, как вы готовы мне помочь.

xx

— Эмили/Код Пикси

P.S. Вы можете следовать за мной дальше Твиттер и читайте больше моих статей в моем блоге

Оригинал: “https://dev.to/thecodepixi/ruby-javascript-and-java-walk-into-a-bar-2103”