github icontwitter icon

Tarayıcının Alametleri: Console API

Author imageEnes Başpınar /23 Eyl 2022
10 min read •––– views

Tarayıcılarla ilgili bazı bilgiler vermek için yeni seriye başlamak istedim sanki başladıklarımı bitirmiş gibi. İşte ilk yazım. Yeniler varsa kafa karıştıran her şeye API deme olayına bir açıklık getirelim öncelikle. Basitçe bir konuda sorumluluk sahibi olan bir uygulamanın özel bilgilerine erişmek için fonksiyonlar/parametreler barındıran yapıya API (application programming interface) diyebiliriz. console'un yanında document, window, fetch şeklinde örnekler çoğaltılabilir.

console.log() metodunu yazılımcılar olarak çok fazla kullanıyoruz hatta en fazla yazdığımız metod olabileceğine de bahse girerim. Peki console nesnesi bu kadarla mı sınırlı? Hiç sanmam. Öyleyse bir bakalım.

log() - info() - warn() - error() - debug()

Önce bi klasiklerden başlayalım. Konsola yazdığımız metinler farklı önem seviyelerine sahip olurlar. Ve hatta önemlerini belirten renk ve simgeler gibi görsel uyarıcılar ile gösterilebilirler.

log(), geliştirme yaparken değişkenin anlık durumunu görmek için geçici olarak kullanılabilir.


_2
console result = await axios.get(...);
_2
console.log("sadasdasdas", result);

info(), son kullanıcıya bir metodun doğru biçimde nasıl kullanılacağıyle ilgili bilgi verebilir.


_1
console.info("React Hook "useState" is called conditionally. React Hooks must be called in the exact same order in every component render. (react-hooks/rules-of-hooks)")

warn(), bir metodun isminin değiştiğini ya da artık kullanımdan kaldırılacağıyla ilgili kullanıcıya bildirebilir.


_1
console.warn("Warning: componentWillMount has been renamed, and is not recommended for use. See https:/fb.me/react-unsafe-component-lifecycles for details.")

error(), kod çalıştırılırken karşılaşılan bir hatayı ya da yapılması unutulan bir şeyi bildirmek için kullanılabilir.


_1
console.error('SyntaxError: /src/App.js: Unexpected token, expected "(" (5:2)')

debug(), bu da geliştirme yaparken anlık olarak değişkenleri görmek için kullanılabilir.


_1
console.warn("Örnek bulamadım örnek...")

Bunları geliştirdiğimiz yazılımlarda her zaman aktif kullanmıyoruz ancak bir paket yazdığımız senaryoyu düşündüğümüzde kullanıcının herhangi bir hata ya da uyarıyı doğru bir şekilde anladığından emin olmak isteriz.

assert()

Konsola belirli koşullara göre mesaj yazdırmamızı sağlar. İşte olay budur. İlk parametrede verdiğimiz koşul false ise verdiğimiz ikinci parametreyi yazdırır. if içlerine log atmaya son!


_6
const response = await fetch("https://jsonplaceholder.typicode.com/users");
_6
const statusCode = response.status;
_6
_6
console.assert(statusCode === 200, {data: statusCode, error: "Occured an error!"})
_6
// ya da
_6
console.assert(statusCode === 200, "Occured an error!")

clear()

O ana kadar atılmış olan tüm mesajları temizler.


_1
console.clear()

Tarayıcıda çalışsa da Node terminalinde temizlemez. Eğer bu işlevi isteniyorsa process.stdout.write('\033c'); gibi stdout'a direk müdahale eden bir kod tercih edilebilir.

count() - countReset()

İşte güzel bir tane geliyor. Normalde bir şeyin ne kadar render olduğunu vs kontrol etmek için geçici değişken oluşturup kullanırız ya heh işte artık gerek yok. count() reis kodda koyduğumuz yerde ne kadar çalıştığını tutar ver konsola çıktı olarak verir. Eğer sıfırlamak istersek de countReset() kullanırız. Sayaçları özelleştirmek için label parametresi verebilir ve sıfırlarken yine bu parametreyi kullanırız.


_12
for (let i = 0; i < 5; i++) {
_12
console.count();
_12
console.count("myCounter");
_12
_12
if (i === 2) {
_12
console.countReset();
_12
}
_12
_12
if (i === 4) {
_12
console.countReset("myCounter");
_12
}
_12
}

=== Output:

default: 1 myCounter: 1 default: 2 myCounter: 2 default: 1 myCounter: 3 default: 2 myCounter: 4 default: 3 myCounter: 1

Ama sıfırlamayı sakın unutmayın. Unutursanız kaldığı yerden saymaya devam ederler.

group() - groupCollapsed() - groupEnd()

Bazen çıktılar birbiriyle bağımlı oluyor. Mesela bir ilişkili değişkenlerin değerlerini görmek istiyoruz ancak bir döngü içerisindeseler ayıklamak zor olabiliyor. group() (genişletilmiş) ve groupCollapsed() (daraltılmış) ile grup oluştururuz. Gruplamayı bitirmek için groupEnd() kullanırız.


_10
const name = "Enes";
_10
const age = 21;
_10
const city = "Bursa";
_10
const country = "Turkey";
_10
_10
console.group("Person"); // ya da console.groupCollapsed()
_10
console.log("Age: ", age);
_10
console.log("City: ", city);
_10
console.log("Country: ", country);
_10
console.groupEnd();

Ve hatta iç içe bile kümelemeyebiliriz.


_12
const name = "Enes";
_12
const age = 21;
_12
const city = "Bursa";
_12
const country = "Turkey";
_12
_12
console.group("Person"); // ya da console.groupCollapsed()
_12
console.log("Age: ", age);
_12
console.group("Location");
_12
console.log("City: ", city);
_12
console.log("Country: ", country);
_12
console.groupEnd();
_12
console.groupEnd();

table()

Nesneleri ve dizileri konsolda okumak ölüm gibi oluyor. Bunları tablo şeklinde görselleştirebiliriz.


_1
console.table(["Turkey", "Italy", "England"]);


_7
const people = [
_7
{firstName: "Kemal", age: 21},
_7
{firstName: "Can", age: 5},
_7
{firstName: "Gürbüz", age: 76},
_7
];
_7
_7
console.table(people, ["firstName", "age"]);


_10
class Product {
_10
constructor(name, color, price) {
_10
this.name = name;
_10
this.color = color;
_10
this.price = price;
_10
}
_10
}
_10
_10
const product = new Product("Elbise", "Kırmızı", 299.9);
_10
console.table(product);


_13
class Product {
_13
constructor(name, color, price) {
_13
this.name = name;
_13
this.color = color;
_13
this.price = price;
_13
}
_13
}
_13
_13
const dress = new Product("Elbise", "Kırmızı", 299.9);
_13
const shoe = new Product("Ayakkabı", "Beyaz", 123);
_13
const hat = new Product("Şapka", "Siyah", 520);
_13
_13
console.table([dress, shoe, hat], ["name", "color", "price"]);

time() - timeEnd() - timeLog()

Bazen kodların çalışma süresini ölçmek isteriz. Başlangıçta tarih alırız, bitince tarih alırız ve aradaki farkı buluruz. Ancak bir kısayolumuz var. Zamanlayıcıyı başlatmak için time(), anlık değerini almak için timeLog(), sonlandırıp süresini ekrana yazdırmak için timeEnd() kullanırız.


_5
console.time("myTimer");
_5
for(let i = 0; i < 10; i+=1) {
_5
console.timeLog("myTimer")
_5
}
_5
console.timeEnd("myTimer");

=== Output:

myTimer: 0.003173828125 ms myTimer: 0.06396484375 ms myTimer: 0.08984375 ms myTimer: 0.114013671875 ms myTimer: 0.135009765625 ms myTimer: 0.154052734375 ms myTimer: 0.196044921875 ms myTimer: 0.2119140625 ms myTimer: 0.23193359375 ms myTimer: 0.251953125 ms myTimer: 0.27392578125 ms

trace()

Bir fonksiyonun çağrılmasına kadar hangi sırayla hangi fonksiyonların çalıştığını görmek istersek kullanırız.


_21
function mapData(result) {
_21
console.trace();
_21
_21
return {
_21
name: result.name,
_21
username: result.username,
_21
email: result.email
_21
};
_21
}
_21
_21
async function getResult(response) {
_21
const result = await response.json();
_21
return mapData(result);
_21
}
_21
_21
async function fetchData(string) {
_21
const response = await fetch("https://jsonplaceholder.typicode.com/users/1");
_21
return getResult(response);
_21
}
_21
_21
await fetchData();

=== Output:

console.trace overrideMethod mapData getResult await in getResult (async) fetchData await in fetchData (async) (anonymous)

Serin ve muazzam bir cuma akşamının verdiği mutlulukla böyle minik bir yazı yazayım dedim.

Yazı burada biter. Sağlıcakla kalın.

Kaynaklar

2022 © No rights are reserved.Inspired by Lee Robinson's blog.