public class FungsiBercampur {

    // State bersama di luar method: sumber ketidakmurnian
    static int nomorUrut = 0;
    static double totalPajak = 0;

    // Impure: hasil bergantung pada state tersembunyi, bukan hanya argument
    static int panggilanBerikutnya() {
        nomorUrut = nomorUrut + 1;
        return nomorUrut;
    }

    // Impure: nilai balik tetap, tetapi mengubah state di luar dirinya
    static double catatPajak(double harga, double tarifPersen) {
        double pajak = harga * tarifPersen / 100.0;
        totalPajak = totalPajak + pajak;   // side effect
        return pajak;
    }

    public static void main(String[] args) {
        System.out.println("panggilanBerikutnya() = " + panggilanBerikutnya());
        System.out.println("panggilanBerikutnya() = " + panggilanBerikutnya());

        System.out.println("catatPajak(100000, 11) = " + catatPajak(100000, 11));
        System.out.println("catatPajak(100000, 11) = " + catatPajak(100000, 11));
        System.out.println("totalPajak             = " + totalPajak);
    }
}
