// var helloMessage: String = "Selamat Datang"
// print("Selamat Pagi dan \(helloMessage)")
// let valueMax = Int32.max; print(valueMax)
// tipe data predicted
// let age = 20; print(age)
// akan memprediksi bertipe data integer
// let pi = 3.14125; print(pi)
// akan memprediksi bertipe data double, pada dasarnya swift akan mendahlukan double
// dari pada float pada saat prediksi dengan floating point
// materi numeric literals
// Numerik literal dapat ditulis dengan berbagai macam:
// Angka desimal, tanpa awalan.
// Angka biner, dengan awalan 0b.
// Angka oktal, dengan awalan 0o.
// Angka heksadesimal, dengan awalan 0x.
// let decimalInteger = 18 //desimal
// let binaryInteger = 0b10010 // 18 in binary notasi
// let octalInteger = 0o22 // 18 in octal notasi
// let hexadecimalInteger = 0x12 // 18 in hexadesimal
// print(decimalInteger, binaryInteger, octalInteger, hexadecimalInteger)
// floating point literal
// let decimalDouble = 12.1875
// let exponentDouble = 1.231252e1
// let hexadesimalDouble = 0xC.3p0
// print(decimalDouble, exponentDouble, hexadesimalDouble)
// integer konfersi
// let cannotBeNegative: UInt8 = -1
// UInt8 tidak dapat menyimpan angka negatif, dan akan menyebabkan error.
// let tooBig: Int8 = Int8.max + 1
// Int8 tidak dapat menyimpan sebuah angka yang lebih besar dari nilai maksimumnya, dan akan menyebabkan error.
// let twoThousand: UInt16 = 2_000
// let one: UInt8 = 1
// let twoThousandAndOne = twoThousand + UInt16(one); print(twoThousandAndOne)
// let three = 3
// let point = 0.4123
// let pi = Double(three) + point; print(pi)
// Type Alias
// Menginisasi nilai tertetu dengan alias tertentu
// typealias AudioSample = UInt16
// var maxAudioSample = AudioSample.max; print(maxAudioSample)
// Booelan
// seperti biasanya
// let jerukWarnaOrange = false
// let jambuWarnaHitam = false
// if jerukWarnaOrange != true{
// print("Benar sekali, jeruk berwarna oren")
// }else{
// print("Oops anda belum beruntung")
// }
// Tuples
// tuples adalah struktur data yang digunakan untuk menyimpan sekumpulan data
// let http404Error = (404, "Not Found")
// cara lain
// let http404Error = (statusCode: "200", description: "OK")
// let (statusCode, statusMessage) = http404Error
// jika ingin mengambil salah satu data dari tupples
// let (justStatusCode, _) = http404Error
// print("The status code is \(http404Error.statusCode)")
// Optionals
// let possibleNumber = "123"
// let convertNumber = Int(possibleNumber)
// print(type(of: convertNumber))
// Null masih dalam optionals
// var serverResponseCode: Int? = 404
// serverResponseCode = nil
// print(type(of: serverResponseCode))
// print(serverResponseCode)
// if serverResponseCode != nil {
// print("serverResponseCode have some integer value")
// }else{
// print("Wrong way")
// }
// Ketika mengunakan string? maka data akan nil
// var myName: String?
// print(myName)
// Optional Binding
// digunakan untuk mencari tahu apakah sbuah opsional mengadung nilai atau tidak
// let possibleNumber = "123"
// if let actualNumber = Int(possibleNumber) {
// print("The string \"(possibleNumber)\" has an integer value of \(actualNumber)")
// }
// if let firstNumber = Int("4") {
// if let secondNumber = Int("42") {
// if firstNumber < secondNumber && secondNumber < 100 {
// print("\(firstNumber) < \(secondNumber) < 100")
// }
// }
// }
// Erorr Handling
// bisa menggunakan throw , catch, propagating atau modulation
print("Selamat Datang di Belajar Swift")
let firstName = "Afif", lastName = "Alfiano"
let fullName = firstName + " " + lastName
let address = "Yogyakarta"
let job = "FrontEnd Developer"
let age = 0b10100
print("------------------------------------")
print("Apakah kalian tahu \(fullName)?")
print("\(firstName) adalah seorang \(job)")
print("Saat ini ia berumur \(age) dan bertempat tinggal di \(address)")
print("------------------------------------")
import Foundation
print("Selamat Datang di Pemrograman Switft")
print("------------------------------------")
print("Masukkan nama depan Anda: "); let firstName = readLine()!
print("Masukkan nama belakang Anda: "); let lastName = readLine()!
print("Masukkan umur Anda: "); let age = readLine()!
print("Masukkan alamat Anda: "); let address = readLine()!
print("Masukkan pekerjaan Anda: ");let job = readLine()!
let fullName = firstName + " " + lastName
print("------------------------------------")
print("Perkenalkan, nama saya /(fullName)")
print("Saya adalah seorang /(job)")
print("Saat ini saya berumur /(age) dan bertempat tinggal di /(address)")
// var operasi = "hello" + "world"; print(operasi)
// tupple
// ("blue", -1) < ("purple", 1)
// ("blue", false) < ("purple", true)
// Explicit Parentheses
// let enteredDoorCode = true
// let passedRetinaScan = true
// let hasDoorKey = false
// let knowsOverridePassword = true
// if (enteredDoorCode && passedRetinaScan) || hasDoorKey || knowsOverridePassword{
// print("Welcome")
// }else{
// print("Access Denied")
// }
// Range opertaor
// Operator rentang tertutup (a...b) mendefinisikan rentang yang berjalan dari a ke b, dan mencakup nilai a dan b. Nilai a tidak boleh lebih besar dari pada b. Operator rentang tertutup berguna ketika Anda melakukan iterasi pada rentang nilai yang ingin Anda gunakan, seperti penggunaan perulangan for-in:
// for index in 1...5 {
// print("\(index) times 5 is \(index * 5)")
// }
// Half Open Range Opertaor
// let names = ["Anna", "Alex", "Brian", "Jack"]
// let count = names.count
// for i in 0..<count {
// print("Person \(i + 1) is called \(names[i])")
// }
// One Side Range Operator
// let names = ["Anna", "Alex", "Brian", "Jack"]
// for name in names[2...] {
// print(name)
// }
// let range = ...5
// range.contains(7)
// range.contains(4)
// range.contains(-1)
// Misc Operator
// dapat berupa operator minus plus range dan kondisional
// let three = 3
// let minusThree = -three; print(minusThree)
// let contentHeight = 40
// let hasHeader = true
// // let rowHeight = contentHeight + (hasHeader ? 50 : 20); print(rowHeight)
// // jika diuraikan
// let rowHeight: Int
// if hasHeader{
// rowHeight = contentHeight + 50
// }else {
// rowHeight = contentHeight + 20
// }
// print(rowHeight)
// Nil-Coalescing Operator
let defaultColorName = "red"
var userDefinedColorName : String?
var colorNameToUse = userDefinedColorName ?? defaultColorName
print(colorNameToUse)
let height = 3.0
let length = 4.0
let width = 3.4
let surfaceArea = 2 * ((width * length) + (width * height) + (height * length))
let circumference = 4 * (width + length + height)
let volume = height * length * width
print("----------------------------------") // Ini adalah output dari program yang Anda buat
print("Anda memiliki sebuah balok dengan:")
print("Lebarnya adalah \(width) cm")
print("Tingginya adalah \(height) cm")
print("Panjangnya adalah \(length) cm")
print("Volemenya adalah \(volume) cm3")
print("Luas permukaannya adalah \(surfaceArea) cm2")
print("Kelilingnya adalah \(circumference) cm")
print("----------------------------------")
print("Selamat Datang")
print("--------------")
print("Masukkan lebar balok: "); let widthInput = readLine()
print("Masukkan tinggi balok: "); let heightInput = readLine()
print("Masukkan panjang balok: "); let lengthInput = readLine()
// Mengubah dari string ke double
if let length = Double(lengthInput ?? "0"), let height = Double(heightInput ?? "0"), let width = Double(widthInput ?? "0"){
// Ini adalah proses penghitungan yang dilakukan dari program yang Anda buat
let volume = length * height * width
let surfaceArea = 2 * ((width * length) + (width * height) + (height * length))
let circumference = 4 * (width + length + height)
print("----------------------------------")
// Ini adalah output dari program yang Anda buat
print("Anda memiliki sebuah balok dengan:")
print("Lebarnya adalah \(width) cm")
print("Tingginya adalah \(height) cm")
print("Panjangnya adalah \(length) cm")
print("Volemenya adalah \(volume) cm3")
print("Luas permukaannya adalah \(surfaceArea) cm2")
print("Kelilingnya adalah \(circumference) cm")
print("----------------------------------")
} else {
// Ketika input tidak valid
print("----------------------------------")
print("Input tidak valid")
print("----------------------------------")
}