์์ ๋ณ์ ์ ๊ฑฐ๋ฅผ ๊ณ์ํด๋ณด์. ์ฑ๋ฅ๊ณผ ๋ฆฌํฉํฐ๋ง์ ๊ด๊ณ๋ ์ด๋จ๊น?
statement ํจ์ ์ชผ๊ฐ๊ธฐ (๊ณ์)
VolumeCredits ๋ณ์ ์ ๊ฑฐํ๊ธฐ
function statement(invoice, plays) {
let totalAmount = 0;
let volumeCredits = 0;
let result = '์ฒญ๊ตฌ ๋ด์ญ (๊ณ ๊ฐ๋ช
: ${invoice.customers})\n';
for (let perf of invoice.performances) {
volumeCredits += volumeCreditsFor(perf);
//์ฒญ๊ตฌ ๋ด์ญ์ ์ถ๋ ฅํ๋ค.
result += '${playFor(perf).name}: ${usd(amountFor(perf))} (${perf.audience}์)\n';
totalAmount += amountFor(perf);
}
result += '์ด์ก: ${usd(totalAmount)}\n';
result += '์ ๋ฆฝ ํฌ์ธํธ: ${volumeCredits)์ \n';
";
return result;
function amountFor(aPerformance) {
let result = 0;
switch (playFor(aPerformance).type) {
case "tragedy": // ๋น๊ทน
result = 40000;
if (aPerformance.audience > 30) {
result += 1000 * (aPerformance.audience - 30);
}
break;
case "comedy": // ํฌ๊ทน
result = 30000;
if (aPerformance.audience > 20) {
result += 10000 + 500 * (aPerformance.audience - 20);
}
result += 300 * aPerformance.audience;
break;
default:
throw new Error('์ ์ ์๋ ์ฅ๋ฅด: ${playFor(aPerformance).type}');
}
return result;
}
function playFor(aPerformance) {
return plays[aPerformance.playID];
}
function usd(aNumber) {
return new Intl.NumberFormat("en-Us", {
style: "currency",
currency: "USD",
minimumFractionDigits: 2
}).format(aNumber / 100);
}
}
volumeCredits
๋ณ์๋ ๋ฐ๋ณต๋ฌธ์ ๋๋ฉฐ ๊ฐ์ ๋์ ํ๊ณ ์๋ค. ์กฐ๊ธ๋ ๊น๋ค๋ก์ด ๊ฒฝ์ฐ๋ค.- ๋ฐ๋ณต๋ฌธ ์ชผ๊ฐ๊ธฐ๋ก
volumeCredits
์ ๋ํ๋ ๋ถ๋ถ์ ๋นผ์. - ์ด๋ ๋์ ํ๋ฆ์ ๋ช ํํ ๋ถ๋ฆฌํ๊ธฐ ์ํ ์์ ์ด๋ค.
function statement(invoice, plays) {
let totalAmount = 0;
let volumeCredits = 0;
let result = '์ฒญ๊ตฌ ๋ด์ญ (๊ณ ๊ฐ๋ช
: ${invoice.customers})\n';
for (let perf of invoice.performances) {
//์ฒญ๊ตฌ ๋ด์ญ์ ์ถ๋ ฅํ๋ค.
result += '${playFor(perf).name}: ${usd(amountFor(perf))} (${perf.audience}์)\n';
totalAmount += amountFor(perf);
}
for (let perf of invoice.performances) {
volumeCredits += volumeCreditsFor(perf);
}
result += '์ด์ก: ${usd(totalAmount)}\n';
result += '์ ๋ฆฝ ํฌ์ธํธ: ${volumeCredits)์ \n';
";
return result;
}
- ๋ค์ ๋ ์ปดํ์ผ - ํ ์คํธ - ์ปค๋ฐํ๋ค.
- ๊ทธ ๋ค์์ผ๋ก ๋ฌธ์ฅ ์ฌ๋ผ์ด๋๋ฅผ ์ ์ฉํด์
volumeCredits
๋ณ์๋ฅผ ๋ฐ๋ณต๋ฌธ ์์ผ๋ก ์ฎ๊ฒจ๋ณด์. - ๋ณ์ ์ ์ธ๊ณผ ๋์์ ์์ง ์์น๊ฐ ๊ฐ๊น์ธ ์๋ก ๊ฐ๋ ์ฑ์ด ๋์์ง๋ค.
function statement(invoice, plays) {
let totalAmount = 0;
let result = '์ฒญ๊ตฌ ๋ด์ญ (๊ณ ๊ฐ๋ช
: ${invoice.customers})\n';
for (let perf of invoice.performances) {
//์ฒญ๊ตฌ ๋ด์ญ์ ์ถ๋ ฅํ๋ค.
result += '${playFor(perf).name}: ${usd(amountFor(perf))} (${perf.audience}์)\n';
totalAmount += amountFor(perf);
}
let volumeCredits = 0;
for (let perf of invoice.performances) {
volumeCredits += volumeCreditsFor(perf);
}
result += '์ด์ก: ${usd(totalAmount)}\n';
result += '์ ๋ฆฝ ํฌ์ธํธ: ${volumeCredits)์ \n';
";
return result;
}
- ๋ค์ ์ปดํ์ผ - ํ ์คํธ - ์ปค๋ฐํ๋ค.
volumeCredits
๋ณ์ ์ญ์ ์์ ๋ณ์์ด๋ค. ์ด๋ฅผ ์ ๊ฑฐํ๊ธฐ ์ํด ํจ์ ์ถ์ถํ๊ธฐ๋ฅผ ์ ์ฉํด๋ณด์.- ํน์ ์์ ๋ณ์๋ฅผ ์ง์ ํจ์๋ก ๋ฐ๊พธ๊ธฐ๋ก ์๊ฐํ ์๋ ์๊ฒ ๋ค.
function statement(invoice, plays) {
let totalAmount = 0;
let result = '์ฒญ๊ตฌ ๋ด์ญ (๊ณ ๊ฐ๋ช
: ${invoice.customers})\n';
for (let perf of invoice.performances) {
//์ฒญ๊ตฌ ๋ด์ญ์ ์ถ๋ ฅํ๋ค.
result += '${playFor(perf).name}: ${usd(amountFor(perf))} (${perf.audience}์)\n';
totalAmount += amountFor(perf);
}
let volumeCredits = totalVolumeCredits();
result += '์ด์ก: ${usd(totalAmount)}\n';
result += '์ ๋ฆฝ ํฌ์ธํธ: ${volumeCredits)์ \n';
";
return result;
function totalVolumeCredits() {
let volumeCredits = 0;
for (let perf of invoice.performances) {
volumeCredits += volumeCreditsFor(perf);
}
return volumeCredits;
}
}
- ๋ค์ ์ปดํ์ผ - ํ ์คํธ - ์ปค๋ฐํ๋ค.
- ๋ ์์ ๋ณ์(
volumeCredits
)๋ฅผ ์ ๊ฑฐํ๊ธฐ ์ํด ๋ณ์ ์ธ๋ผ์ธํ๊ธฐ๋ฅผ ์ ์ฉํด๋ณด์.
function statement(invoice, plays) {
let totalAmount = 0;
let result = '์ฒญ๊ตฌ ๋ด์ญ (๊ณ ๊ฐ๋ช
: ${invoice.customers})\n';
for (let perf of invoice.performances) {
//์ฒญ๊ตฌ ๋ด์ญ์ ์ถ๋ ฅํ๋ค.
result += '${playFor(perf).name}: ${usd(amountFor(perf))} (${perf.audience}์)\n';
totalAmount += amountFor(perf);
}
result += '์ด์ก: ${usd(totalAmount)}\n';
result += '์ ๋ฆฝ ํฌ์ธํธ: ${totalVolumeCredits())์ \n';
";
return result;
...
function totalVolumeCredits() {
let volumeCredits = 0;
for (let perf of invoice.performances) {
volumeCredits += volumeCreditsFor(perf);
}
return volumeCredits;
}
}
- ๋ค์ ์ปดํ์ผ - ํ ์คํธ - ์ปค๋ฐํ๋ค.
- ์, ์ ๊น ์๊ฐํด๋ณด์. ์ฐ๋ฆฌ๋ for๋ฌธ์ ๋๊ฐ ๋ง๋ค์๋ค. 2๋ฐฐ์ ์๊ฐ๋ณต์ก๋๊ฐ ์๊ฒผ๋ค ํ ์ ์๋ค.
- ํ์ง๋ง ์ด์ ๋ ์ค๋ณต์ ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ์ด ๋ฏธ๋ฏธํ ๋๊ฐ ๋ง๋ค.
- ๋๋ํ ์ปดํ์ผ๋ฌ๋ค์ ์ต์ ์บ์ฑ ๊ธฐ๋ฒ์ผ๋ก ๋ฌด์ฅํ๊ณ ์์ด ์ง๊ด์ ์ด์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค๋ค.
- ๋ฌผ๋ก ๋๋๋ก ๋ฆฌํฉํ ๋ง์ด ์ฑ๋ฅ์ ์๋นํ ์ํฅ์ ์ฃผ๊ธฐ๋ ํ๋ค.
- ํ์ง๋ง ๊ทธ๋ผ์๋ ๋ฆฌํฉํ ๋ง ํ๋ค.
- ์ ๋ค๋ฌ์ด์ ธ ์๋ค๋ฉด ์ฑ๋ฅ ๊ฐ์ ๋ ์์ํ๋ค.
๋ฆฌํฉํฐ๋ง์ผ๋ก ์ธํ ์ฑ๋ฅ ๋ฌธ์ ๋ ํน๋ณํ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด ์ผ๋จ ๋ฌด์ํด๋ผ.
TotalAmount ๋ณ์ ์ ๊ฑฐํ๊ธฐ
- ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ์.
- ๋ฐ๋ณต๋ฌธ์ ์ชผ๊ฐ๊ณ , ์ด๊ธฐํ ๋ฌธ์ฅ์ ์์น๋ฅผ ์ฎ๊ธฐ๊ณ , ํจ์๋ฅผ ์ถ์ถํ์.
- ๊ทธ๋ฐ๋ฐ ์ฌ๊ธฐ์ totalAmount๋ผ๋ ํจ์ ์ด๋ฆ์ ์ฌ์ฉํ๋ ค ํ์ผ๋, ์ด๋ฏธ ๊ฐ์ ์ด๋ฆ์ ๋ณ์๊ฐ ์๋ค.
- ์ด๋ฐ ๊ฒฝ์ฐ ์์ ์ด๋ฆ์ ๋ถ์ฌ์ค๋ค.
function statement(invoice, plays) {
let result = '์ฒญ๊ตฌ ๋ด์ญ (๊ณ ๊ฐ๋ช
: ${invoice.customers})\n';
for (let perf of invoice.performances) {
//์ฒญ๊ตฌ ๋ด์ญ์ ์ถ๋ ฅํ๋ค.
result += '${playFor(perf).name}: ${usd(amountFor(perf))} (${perf.audience}์)\n';
}
result += '์ด์ก: ${usd(appleSauce())}\n';
result += '์ ๋ฆฝ ํฌ์ธํธ: ${totalVolumeCredits())์ \n';
";
return result;
...
function appleSauce() {
let totalAmount = 0;
for (let perf of invoice.performances) {
totalAmount += amountFor(perf);
}
return totalAmount;
}
}
- ๋ค์ ์ปดํ์ผ - ํ ์คํธ - ์ปค๋ฐํ๋ค.
- ์ผ๋จ ์ด๋ ๊ฒ ํด๋๊ณ , ํจ์์ด๋ฆ์ ๋ณ๊ฒฝํ๋ค.
function statement(invoice, plays) {
let result = '์ฒญ๊ตฌ ๋ด์ญ (๊ณ ๊ฐ๋ช
: ${invoice.customers})\n';
for (let perf of invoice.performances) {
//์ฒญ๊ตฌ ๋ด์ญ์ ์ถ๋ ฅํ๋ค.
result += '${playFor(perf).name}: ${usd(amountFor(perf))} (${perf.audience}์)\n';
}
result += '์ด์ก: ${usd(totalAmount())}\n';
result += '์ ๋ฆฝ ํฌ์ธํธ: ${totalVolumeCredits())์ \n';
";
return result;
}
function amountFor(aPerformance) {
let result = 0;
switch (playFor(aPerformance).type) {
case "tragedy": // ๋น๊ทน
result = 40000;
if (aPerformance.audience > 30) {
result += 1000 * (aPerformance.audience - 30);
}
break;
case "comedy": // ํฌ๊ทน
result = 30000;
if (aPerformance.audience > 20) {
result += 10000 + 500 * (aPerformance.audience - 20);
}
result += 300 * aPerformance.audience;
break;
default:
throw new Error('์ ์ ์๋ ์ฅ๋ฅด: ${playFor(aPerformance).type}');
}
return result;
function playFor(aPerformance) {
return plays[aPerformance.playID];
}
function usd(aNumber) {
return new Intl.NumberFormat("en-Us", {
style: "currency",
currency: "USD",
minimumFractionDigits: 2
}).format(aNumber / 100);
}
function totalVolumeCredits() {
let volumeCredits = 0;
for (let perf of invoice.performances) {
volumeCredits += volumeCreditsFor(perf);
}
return volumeCredits;
}
function totalAmount() {
let totalAmount = 0;
for (let perf of invoice.performances) {
totalAmount += amountFor(perf);
}
return totalAmount;
}
}