JavaScript 10 — Mantıksal Operatörler

Apr 01 2023
Boole Mantığı Boole mantığı, doğru ve yanlış değerlerle ilgilenen bir mantık sistemidir. Programlamada, boole mantığı, karar vermek ve bir programın akışını kontrol etmek için yaygın olarak kullanılır.

Boole mantığı

Boole mantığı, doğru ve yanlış değerlerle ilgilenen bir mantık sistemidir. Programlamada, boole mantığı, karar vermek ve bir programın akışını kontrol etmek için yaygın olarak kullanılır.

Boole mantığındaki üç ana mantıksal işleç AND, OR ve NOT'tur.

  • AND : AND işleci, yalnızca her iki işlenen de doğruysa doğru döndürür.
  • VEYA : VEYA işleci, işlenenlerden biri veya her ikisi de doğruysa doğru döndürür.
  • NOT : NOT operatörü, verilen bir işlenenin tersini döndürür.

Koddaki Mantıksal İşleçler

JavaScript'in üç mantıksal işleci vardır: &&(VE), ||(VEYA) ve !(DEĞİL). Bu işleçler genellikle JavaScript'teki boole değerlerini birleştirmek ve değiştirmek için kullanılır.

&& (VE) operatörü

Operatör , her iki işlenen de ise ve değilse &&döndürür . İşte bazı örnekler:truetruefalse

// Normal examples
console.log(true && true);   // true
console.log(true && false);  // false
console.log(false && true);  // false
console.log(false && false); // false

// Type coercion examples
console.log("hello" && 42);   // 42
console.log("" && 42);       // ""

  • Operatör &&kısa devre operatörü olarak bilinir çünkü ikinci işleneni yalnızca birinci işlenen doğruysa değerlendirir. Bu, kodu optimize etmek ve hatalardan kaçınmak için yararlı olabilir.

İşlenenlerden en az biri , değilse ve değilse operatör ||döndürür . İşte bazı örnekler:truetruefalse

// Normal examples
console.log(true || true);   // true
console.log(true || false);  // true
console.log(false || true);  // true
console.log(false || false); // false

// Type coercion examples
console.log("" || "hello");  // "hello"
console.log(0 || 42);        // 42

  • Operatör ||aynı zamanda bir kısa devre operatörüdür ve ikinci işleneni yalnızca birinci işlenen yanlışsa değerlendirmektedir.
  • Operatör ||genellikle değişkenler için varsayılan değerleri sağlamak için kullanılır, örneğin const value = input || defaultValue;.

Operatör , işlenen ise , ve işlenen ise !döndürerek bir boole değerini reddeder . İşte bazı örnekler:truefalsefalsetrue

// Normal examples
console.log(!true);  // false
console.log(!false); // true

// Type coercion examples
console.log(!"hello");   // false
console.log(!undefined); // true

  • Operatör !, bir değeri iki kez olumsuzlayarak bir boole türüne dönüştürmek için kullanılabilir, !!value.

Mantıksal Operatörlerin Sırası

Mantıksal işleçlerin sırası, birden çok koşulun değerlendirilmesi gereken bazı durumlarda fark yaratabilir. İşte bazı örnekler:

Operatör önceliği: Mantıksal AND ( &&), Mantıksal OR'den ( ||) daha yüksek önceliğe sahiptir. Bu, &&daha önce değerlendirildiği ||ve bir koşulun sonucunu değiştirebileceği anlamına gelir. Örneğin:

// This condition will evaluate to true
if (true || false && true) {
  // do something
}
// This condition will evaluate to false
if ((true || false) && true) {
  // do something
}

İkinci örnekte, (true || false)ilk olarak değerlendirilir ve sonuç olarak true. Sonra true && truedeğerlendirilir, sonuç olarak true. Koşulun tamamı da doğrudur, ancak parantezler nedeniyle farklı değerlendirilir.

Kısa devre değerlendirmesi: Mantıksal AND ( &&) ve Mantıksal OR ( ||) kısa devre değerlendirmesini kullanır; bu, ikinci işlenenin yalnızca gerektiğinde değerlendirildiği anlamına gelir. Örneğin:

// This condition will evaluate to true without an error
if (x !== null && x.property === "value") {
  // do something
}
// This condition will throw an error
if (x.property === "value" && x !== null) {
  // do something
}

İkinci örnekte, is xherhangi bir özelliği olmadığı için bir hata atar . İkinci işlenen, ilk işlenenden önce değerlendirilir ve bu, dikkatli kullanılmadığı takdirde hatalara yol açabilir.nullx.propertynull

Olumsuzlama: Mantıksal DEĞİL ( !), bir koşulu olumsuzlayarak sonucunu değiştirebilir. Örneğin:

let x = true;

// This condition will evaluate to false
if (!x) {
  // do something
}
// This condition will evaluate to true
if (!!x) {
  // do something
}

Yeni başlayan biri olarak, mantıksal işleçlerin sırasına dikkat etmek ve gerekirse sırayı netleştirmek için parantez kullanmak önemlidir. Kısa devre değerlendirmesini ve hataları nasıl önleyebileceğini anlamak da önemlidir. Olumsuzluk, koşulların okunmasını ve anlaşılmasını zorlaştırabileceği için dikkatli kullanılmalıdır.

Gerçek Dünya Örnekleri

Burada, kodda kullanılan Mantıksal İşleçlerin bazı gerçekçi örnekleri verilmiştir. Örnekleri okuyun ve mantığı anlayıp anlayamadığınızı görün, ancak işlevleri henüz tartışmadığımız için anlayamıyorsanız cesaretiniz kırılmasın!

Kullanıcı girişi doğrulanıyor:

function validateInput(input) {
  const isString = typeof input === 'string';
  const isNotEmpty = input !== '';
  const isLessThanTenChars = input.length < 10;
  return isString && isNotEmpty && isLessThanTenChars;
}

function filterProducts(products, minPrice, maxPrice, availableOnly) {
  return products.filter(product => {
    const isWithinPriceRange = product.price >= minPrice && product.price <= maxPrice;
    const isAvailable = availableOnly ? product.stock > 0 : true;
    return isWithinPriceRange && isAvailable;
  });
}

function isEligibleForDiscount(user) {
  const hasPaid = user.orders.some(order => order.status === 'paid');
  const hasFrequentOrders = user.orders.length >= 5;
  const hasValidCoupon = user.coupons.includes('DISCOUNT2022');
  return (hasPaid || hasFrequentOrders) && hasValidCoupon;
}

function isProductOnSale(product) {
  const isDiscounted = product.discount > 0;
  const hasLowStock = product.stock <= 10;
  return isDiscounted || hasLowStock;
}

function getTaskStatus(priority, isComplete) {
  const isUrgent = priority === 'high' || priority === 'urgent';
  const isOverdue = priority === 'low' && !isComplete;
  const isInProgress = priority === 'medium' && !isComplete;
   if (isUrgent) {
      return 'Urgent';
    } else if (isOverdue) {
      return 'Overdue';
    } else if (isInProgress) {
      return 'In Progress';
    } else {
      return 'Pending';
   }
}