JS Praca domowa nr 3 z użyciem Chat GPT

Prompt: Jesteś profesjonalnym programistą języka JavaScript. Napisz kod do programu, który pobierze od użytkownika za pomocą okien dialogowych dwa boki prostokąta weryfikując poprawność danych (liczby) i informując użytkownika o niepoprawnych. Stwórz funkcję, która będzie przyjmowała 2 argumenty i zwracała ich iloczyn (pole) i wyświetlała wynik w konsoli przeglądarki. Opisz krok po kroku i wyjaśnij swój tok myślenia oraz co każdy fragment kodu robi. Zadanie będzie weryfikowane przez specjalistę tej dziedziny, więc niedziałający kod skutkuje odrzuceniem. Wygeneruj sam plik .js, bez html.

'use strict';

/**
 * Pomocnicza funkcja pobierająca z okna dialogowego liczbę dodatnią.
 * - Informuje o błędach i prosi o ponowny wpis.
 * - Zwraca liczbę (gdy poprawnie wpisano) lub null (gdy użytkownik anuluje).
 */
function promptForPositiveNumber(message) {
  while (true) {
    const raw = window.prompt(message); // okno dialogowe „prompt”
    if (raw === null) return null;      // użytkownik kliknął „Anuluj”

    // Obsługa spacji i przecinka dziesiętnego (np. „12,5” -> „12.5”)
    const normalized = raw.trim().replace(',', '.');

    if (normalized === '') {
      window.alert('Nie wpisano żadnej wartości. Wpisz dodatnią liczbę.');
      continue;
    }

    const value = Number(normalized); // konwersja tekstu na liczbę

    if (!Number.isFinite(value)) {
      window.alert('To nie jest poprawna liczba. Przykład: 12.5');
      continue;
    }

    if (value <= 0) {
      window.alert('Bok musi być liczbą większą od zera.');
      continue;
    }

    return value; // poprawna liczba
  }
}

/**
 * Funkcja oblicza pole prostokąta.
 * @param {number} a - pierwszy bok (dodatnia liczba)
 * @param {number} b - drugi bok (dodatnia liczba)
 * @returns {number} - pole prostokąta
 */
function rectangleArea(a, b) {
  const invalid =
    typeof a !== 'number' || typeof b !== 'number' ||
    !Number.isFinite(a) || !Number.isFinite(b) ||
    a <= 0 || b <= 0;

  if (invalid) {
    throw new TypeError('rectangleArea: argumenty muszą być dodatnimi liczbami.');
  }

  return a * b;
}

// --- Główny przebieg programu ---

const a = promptForPositiveNumber('Podaj długość pierwszego boku prostokąta:');
if (a === null) {
  window.alert('Operacja anulowana.');
} else {
  const b = promptForPositiveNumber('Podaj długość drugiego boku prostokąta:');
  if (b === null) {
    window.alert('Operacja anulowana.');
  } else {
    const area = rectangleArea(a, b);
    console.log(`Pole prostokąta o bokach ${a} × ${b} = ${area}`);
    window.alert('Wynik zapisano w konsoli (otwórz Narzędzia deweloperskie).');
  }
}