ValueScript'te İşlemsel Try Blokları
İstisnaların doğru olması zordur. Gözden kaçırması kolay özellikle zor bir problem, bloklar içinde kısmi değerlendirme olasılığıdır try.
Aşağıdaki JavaScript programını göz önünde bulundurun:
let a = new SmallQueue(["item1"]);
let b = new SmallQueue(["item2", "item3", "item4"]);
try {
const item = a.pop();
b.push(item);
} catch (e) {
console.error("Failed to move item from a to b", e);
}
console.log({ a, b });
{
a: [],
b: ["item2", "item3", "item4", "item1"],
}
{
a: [],
b: ["item2", "item3", "item4"],
}
let a = new SmallQueue(["item1"]);
let b = new SmallQueue(["item2", "item3", "item4"]);
try {
if (b.isFull()) {
throw new Error("b is full");
}
const item = a.pop();
b.push(item);
} catch (e) {
console.error("Failed to move item from a to b", e);
}
console.log({ a, b });
Başka bir seçenek de değişebilecek değişkenlerin bir kopyasını kaydetmek ve onları şuraya geri yüklemektir catch:
let a = new SmallQueue(["item1"]);
let b = new SmallQueue(["item2", "item3", "item4"]);
const aCopy = a.copy();
const bCopy = b.copy();
try {
const item = a.pop();
b.push(item);
} catch (e) {
a = aCopy;
b = bCopy;
console.error("Failed to move item from a to b", e);
}
console.log({ a, b });
- Ayrıntılı olduğu ve gereksiz yere savunma hissi verdiği için bunu yapmayabilirsiniz.
copyTanımlanacak bir işlem gerektirir- İşlem varsa
copy, verimli olmayabilir - Yan etkileri varsa
a.pop, bu yan etkiler geri alınmayacaktır.
let a = new SmallQueue(["item1"]);
let b = new SmallQueue(["item2", "item3", "item4"]);
let item;
try {
item = a.pop();
} catch (e) {
console.error("Failed to move item from a to b", e);
console.log({ a, b });
return;
}
try {
b.push(item);
} catch (e) {
a.unPop(item);
console.error("Failed to move item from a to b", e);
}
console.log({ a, b });
- Son derece ayrıntılı
a.unPop(item)başarısız olduğunda bu işlemin gerekli olduğunu anlamamızı gerektirirb.push(item), ki bu yine de gözden kaçırması kolaydır
ValueScript'te trybloklar işlemseldir; ya tamamlanana kadar çalışırlar ya da geri alınırlar.
Orijinal programımız herhangi bir değişiklik yapmadan istediğimizi yapıyor:
let a = new SmallQueue(["item1"]);
let b = new SmallQueue(["item2", "item3", "item4"]);
try {
const item = a.pop();
b.push(item);
} catch (e) {
console.error("Failed to move item from a to b", e);
}
console.log({ a, b });
{
a: ["item1"],
b: ["item2", "item3", "item4"],
}
- "Bunu yapamayabilirsiniz"
— ValueScript derleyicisi talimatları otomatik olarak ekler - "
copyİşlem gerektirir"
— ValueScript, değer semantiğini kullanır, yalnızca kullanıraCopy = ave bu, kopyalamaya eşdeğerdir - “
copyverimli olmayabilir”
— ValueScript, sonuna kadar yazma sırasında kopyalamayı kullanır, oldukça verimlidir - "Yan etkileri
a.popgeri alınmayacak"
— ValueScript'in yan etkileri yoktur
* bazı harika yabancı işlevler, geri alma işlemlerini içerebilir ve bunlar otomatik olarak çağrılır
ValueScript, değer semantiğine sahip bir TypeScript lehçesidir. Bu makalenin programının bir tanıtımını içeren çevrimiçi bir oyun alanına sahiptir ve açık kaynaklıdır .

![Bağlantılı Liste Nedir? [Bölüm 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































