JavaScriptã®åŒ·åãªãªããžã§ã¯ããã¿ãŒã³ãããã³ã°æ©èœãæ¢æ±ãããšã¬ã¬ã³ãã§å¹ççãªã³ãŒããæžããŸããããæ§é çãããã³ã°ãåå²ä»£å ¥ãé«åºŠãªäœ¿çšäŸãåŠã³ãŸãã
JavaScriptã®ãªããžã§ã¯ããã¿ãŒã³ãããã³ã°ïŒæ§é çãããã³ã°ã®æ·±æã
JavaScriptã¯ãäžéšã®é¢æ°åèšèªïŒäŸïŒHaskellãScalaãRustïŒã®ããã«çµã¿èŸŒã¿ã®ãã¿ãŒã³ãããã³ã°æ©èœãæã€èšèªãšã¯äŒçµ±çã«èŠãªãããŠããŸããããç¹ã«ãªããžã§ã¯ããæ±ãéã«åæ§ã®çµæãéæããããã®åŒ·åãªãã¯ããã¯ãæäŸããŸãããã®èšäºã§ã¯ãJavaScriptã®åå²ä»£å ¥ããã®ä»ã®é¢é£æ©èœã䜿çšããæ§é çãããã³ã°ãæ·±ãæãäžããããããã¬ãã«ã®éçºè ã«é©ããå®è·µçãªäŸãšãŠãŒã¹ã±ãŒã¹ã玹ä»ããŸãã
ãã¿ãŒã³ãããã³ã°ãšã¯ïŒ
ãã¿ãŒã³ãããã³ã°ã¯ãå€ããã¿ãŒã³ãšæ¯èŒãããã¿ãŒã³ãäžèŽããå Žåã«å€ã®äžéšãæœåºããŠå€æ°ã«ãã€ã³ãããããšãå¯èœã«ããããã°ã©ãã³ã°ãã©ãã€ã ã§ããç¹ã«è€éãªããŒã¿æ§é ãæ±ãéã«ãç°¡æœã§è¡šçŸåè±ããªã³ãŒããæžãããã®åŒ·åãªããŒã«ã§ããJavaScriptã§ã¯ãåå²ä»£å ¥ãæ¡ä»¶æããã®ä»ã®ãã¯ããã¯ãçµã¿åãããããšã§ãåæ§ã®æ©èœãå®çŸããŸãã
åå²ä»£å ¥ã«ããæ§é çãããã³ã°
åå²ä»£å ¥ã¯ããªããžã§ã¯ããé åããå€ãæœåºããå¥ã ã®å€æ°ã«ä»£å ¥ããããšãå¯èœã«ããJavaScriptã®äžæ žæ©èœã§ãããããæ§é çãããã³ã°ã®åºç€ã圢æããŸããã©ã®ããã«æ©èœããã®ãèŠãŠãããŸãããã
ãªããžã§ã¯ãã®åå²ä»£å ¥
ãªããžã§ã¯ãã®åå²ä»£å ¥ã䜿çšãããšããªããžã§ã¯ãããããããã£ãæœåºããåããŸãã¯ç°ãªãååã®å€æ°ã«å²ãåœãŠãããšãã§ããŸãã
const person = {
name: 'Alice',
age: 30,
address: {
city: 'London',
country: 'UK'
}
};
const { name, age } = person; // Extract name and age
console.log(name); // Output: Alice
console.log(age); // Output: 30
const { address: { city, country } } = person; // Deep destructuring
console.log(city); // Output: London
console.log(country); // Output: UK
const { name: personName, age: personAge } = person; // Assign to different variable names
console.log(personName); // Output: Alice
console.log(personAge); // Output: 30
説æïŒ
- æåã®äŸã§ã¯ã`name`ãš`age`ããããã£ãåãååã®å€æ°ã«æœåºããŠããŸãã
- 2çªç®ã®äŸã§ã¯ããã¹ãããã`address`ãªããžã§ã¯ããã`city`ãš`country`ããããã£ãæœåºãããæ·±ãåå²ä»£å ¥ã瀺ããŠããŸãã
- 3çªç®ã®äŸã§ã¯ã`property: variableName`æ§æã䜿çšããŠãæœåºããå€ãç°ãªãååã®å€æ°ã«å²ãåœãŠãæ¹æ³ã瀺ããŠããŸãã
é åã®åå²ä»£å ¥
é åã®åå²ä»£å ¥ã䜿çšãããšãé åããèŠçŽ ãæœåºãããã®äœçœ®ã«åºã¥ããŠå€æ°ã«å²ãåœãŠãããšãã§ããŸãã
const numbers = [1, 2, 3, 4, 5];
const [first, second] = numbers; // Extract the first two elements
console.log(first); // Output: 1
console.log(second); // Output: 2
const [head, ...tail] = numbers; // Extract the first element and the rest
console.log(head); // Output: 1
console.log(tail); // Output: [2, 3, 4, 5]
const [, , third] = numbers; // Extract the third element (skip the first two)
console.log(third); // Output: 3
説æïŒ
- æåã®äŸã§ã¯ãæåã®2ã€ã®èŠçŽ ã`first`ãš`second`ãšãã倿°ã«æœåºããŠããŸãã
- 2çªç®ã®äŸã§ã¯ãæ®äœãã©ã¡ãŒã¿ïŒ`...`ïŒã䜿çšããŠãæåã®èŠçŽ ã`head`ã«ãæ®ãã®èŠçŽ ã`tail`ãšããé åã«æœåºããŠããŸãã
- 3çªç®ã®äŸã§ã¯ãã«ã³ãã䜿çšããŠæåã®2ã€ã®èŠçŽ ãã¹ããããã3çªç®ã®èŠçŽ ã`third`ãšãã倿°ã«æœåºããŠããŸãã
åå²ä»£å ¥ãšæ¡ä»¶æã®çµã¿åãã
ããé«åºŠãªãã¿ãŒã³ãããã³ã°ãå®çŸããããã«ãåå²ä»£å ¥ãæ¡ä»¶æïŒäŸïŒ`if`ã`else if`ã`switch`ïŒãšçµã¿åãããŠãããããã£ã«åºã¥ããŠç°ãªããªããžã§ã¯ãæ§é ãåŠçããããšãã§ããŸãã
function processOrder(order) {
if (order && order.status === 'pending') {
const { orderId, customerId, items } = order;
console.log(`Processing pending order ${orderId} for customer ${customerId}`);
// Perform pending order processing logic
} else if (order && order.status === 'shipped') {
const { orderId, trackingNumber } = order;
console.log(`Order ${orderId} shipped with tracking number ${trackingNumber}`);
// Perform shipped order processing logic
} else {
console.log('Unknown order status');
}
}
const pendingOrder = { orderId: 123, customerId: 456, items: ['item1', 'item2'], status: 'pending' };
const shippedOrder = { orderId: 789, trackingNumber: 'ABC123XYZ', status: 'shipped' };
processOrder(pendingOrder); // Output: Processing pending order 123 for customer 456
processOrder(shippedOrder); // Output: Order 789 shipped with tracking number ABC123XYZ
processOrder({ status: 'unknown' }); // Output: Unknown order status
説æïŒ
- ãã®äŸã§ã¯ãç°ãªã泚æã¹ããŒã¿ã¹ãåŠçãã颿°`processOrder`ãå®çŸ©ããŠããŸãã
- `if`ãš`else if`æã䜿çšããŠ`order.status`ããããã£ããã§ãã¯ããŠããŸãã
- 忡件ãããã¯å ã§ãã¹ããŒã¿ã¹ã«åºã¥ããŠ`order`ãªããžã§ã¯ãããé¢é£ããããããã£ãåå²ä»£å ¥ããŠããŸãã
- ããã«ããã`order`ãªããžã§ã¯ãã®æ§é ã«åºã¥ããç¹å®ã®åŠçããžãã¯ãå¯èœã«ãªããŸãã
é«åºŠãªãã¿ãŒã³ãããã³ã°ãã¯ããã¯
åºæ¬çãªåå²ä»£å ¥ãšæ¡ä»¶æãè¶ ããŠãããè€éãªãã¿ãŒã³ãããã³ã°ã®ã·ããªãªãéæããããã«ãããã«é«åºŠãªãã¯ããã¯ã䜿çšã§ããŸãã
ããã©ã«ãå€
åå²ä»£å ¥äžã«ãªããžã§ã¯ãã«ååšããªãå¯èœæ§ã®ããããããã£ã«å¯ŸããŠãããã©ã«ãå€ãæå®ã§ããŸãã
const config = {
apiEndpoint: 'https://api.example.com'
// port is missing
};
const { apiEndpoint, port = 8080 } = config;
console.log(apiEndpoint); // Output: https://api.example.com
console.log(port); // Output: 8080 (default value)
説æïŒ
- ãã®äŸã§ã¯ã`config`ãªããžã§ã¯ãã«ã¯`port`ããããã£ããããŸããã
- åå²ä»£å ¥äžã«ã`port = 8080`ãšããæ§æãã`config`ãªããžã§ã¯ãã«`port`ããããã£ãèŠã€ãããªãå Žåã«ããã©ã«ãå€ãšããŠ8080ãæå®ããŸãã
åçãªããããã£å
çŽæ¥çãªåå²ä»£å ¥ã§ã¯éçãªããããã£åã䜿çšãããŸããããã©ã±ããèšæ³ãçšããç®åºããããã£åã䜿çšããããšã§ãåçãªããŒã«åºã¥ããŠåå²ä»£å ¥ãè¡ãããšãã§ããŸãã
const user = {
id: 123,
username: 'johndoe'
};
const key = 'username';
const { [key]: userName } = user;
console.log(userName); // Output: johndoe
説æïŒ
- ãã®äŸã§ã¯ã倿°`key`ã䜿çšããŠã`user`ãªããžã§ã¯ãããã©ã®ããããã£ãæœåºããããåçã«æ±ºå®ããŠããŸãã
- `[key]: userName`ãšããæ§æã¯ãJavaScriptã«å¯ŸããŠã`key`倿°ã®å€ïŒãã®å Žåã¯'username'ïŒãããããã£åãšããŠäœ¿çšãããã®å€ãæœåºããŠ`userName`倿°ã«å²ãåœãŠãããã«æç€ºããŸãã
æ®äœããããã£
ãªããžã§ã¯ãã®åå²ä»£å ¥äžã«æ®äœãã©ã¡ãŒã¿ïŒ`...`ïŒã䜿çšããŠãæ®ãã®ããããã£ãæ°ãããªããžã§ã¯ãã«éçŽããããšãã§ããŸãã
const product = {
id: 'prod123',
name: 'Laptop',
price: 1200,
manufacturer: 'Dell',
color: 'Silver'
};
const { id, name, ...details } = product;
console.log(id); // Output: prod123
console.log(name); // Output: Laptop
console.log(details); // Output: { price: 1200, manufacturer: 'Dell', color: 'Silver' }
説æïŒ
- ãã®äŸã§ã¯ã`product`ãªããžã§ã¯ããã`id`ãš`name`ããããã£ãæœåºããŠããŸãã
- `...details`ãšããæ§æã¯ãæ®ãã®ããããã£ïŒ`price`ã`manufacturer`ã`color`ïŒã`details`ãšããååã®æ°ãããªããžã§ã¯ãã«éçŽããŸãã
ååã®å€æŽãšããã©ã«ãå€ãå«ããã¹ããããåå²ä»£å ¥
ãã¹ããããåå²ä»£å ¥ããååã®å€æŽãããã©ã«ãå€ãšçµã¿åãããããšã§ãããã«é«ãæè»æ§ãåŸãããšãã§ããŸãã
const employee = {
employeeId: 'E001',
name: 'Bob Smith',
address: {
street: '123 Main St',
city: 'Anytown',
country: 'USA'
},
contact: {
email: 'bob.smith@example.com'
}
};
const {
employeeId,
name: employeeName,
address: {
city: employeeCity = 'Unknown City', // Default value if city is missing
country
},
contact: {
email: employeeEmail
} = {} // Default value if contact is missing
} = employee;
console.log(employeeId); // Output: E001
console.log(employeeName); // Output: Bob Smith
console.log(employeeCity); // Output: Anytown
console.log(country); // Output: USA
console.log(employeeEmail); // Output: bob.smith@example.com
説æïŒ
- ãã®äŸã¯ãè€éãªåå²ä»£å ¥ã®ã·ããªãªã瀺ããŠããŸãã
- `name`ããããã£ã`employeeName`ã«åå倿ŽããŠããŸãã
- `address`ãªããžã§ã¯ãã«`city`ããããã£ããªãå Žåã«åããŠã`employeeCity`ã«ããã©ã«ãå€ãæå®ããŠããŸãã
- ãŸãã`contact`ããããã£ã«å¯ŸããŠãããã©ã«ãã®ç©ºãªããžã§ã¯ããæäŸããŠãããããã«ããåŸæ¥å¡ãªããžã§ã¯ãã«`contact`ãå®å šã«ãªãå Žåã§ããšã©ãŒãé²ããŸããããã¯`contact`ãundefinedã®å Žåã®ãšã©ãŒãé²ãããã§ãã
å®è·µçãªãŠãŒã¹ã±ãŒã¹
åå²ä»£å ¥ã«ãããã¿ãŒã³ãããã³ã°ã¯ãããŸããŸãªã·ããªãªã§äŸ¡å€ããããŸãã
APIã¬ã¹ãã³ã¹ã®è§£æ
APIãæ±ãéãã¬ã¹ãã³ã¹ã¯ãã°ãã°ç¹å®ã®æ§é ãæã£ãŠããŸããåå²ä»£å ¥ã¯ãã¬ã¹ãã³ã¹ããé¢é£ããŒã¿ãæœåºããäœæ¥ãç°¡çŽ åããŸãã
// Assume this is the response from an API endpoint
const apiResponse = {
data: {
userId: 'user123',
userName: 'Carlos Silva',
userEmail: 'carlos.silva@example.com',
profile: {
location: 'Sao Paulo, Brazil',
interests: ['football', 'music']
}
},
status: 200
};
const { data: { userId, userName, userEmail, profile: { location, interests } } } = apiResponse;
console.log(userId); // Output: user123
console.log(userName); // Output: Carlos Silva
console.log(location); // Output: Sao Paulo, Brazil
console.log(interests); // Output: ['football', 'music']
説æïŒ ããã¯ããã¹ããããAPIã¬ã¹ãã³ã¹ããé¢é£ãããŠãŒã¶ãŒããŒã¿ãç°¡åã«åŒãåºãããã®æ å ±ããããã¡ã€ã«ã«è¡šç€ºãããªã©ã®æ¹æ³ã瀺ããŠããŸãã
Reduxã®Reducer
Reduxã«ãããŠãReducerã¯ã¢ã¯ã·ã§ã³ã«åºã¥ããŠç¶æ ã®æŽæ°ãåŠçãã颿°ã§ãããã¿ãŒã³ãããã³ã°ã¯ãããŸããŸãªã¢ã¯ã·ã§ã³ã¿ã€ããåŠçããããã»ã¹ãç°¡çŽ åã§ããŸãã
function counterReducer(state = { count: 0 }, action) {
switch (action.type) {
case 'INCREMENT':
return { ...state, count: state.count + 1 };
case 'DECREMENT':
return { ...state, count: state.count - 1 };
case 'RESET':
return { ...state, count: 0 };
default:
return state;
}
}
// With more complex actions involving payloads, destructuring becomes more beneficial
function userReducer(state = { user: null, loading: false }, action) {
switch (action.type) {
case 'FETCH_USER_REQUEST':
return { ...state, loading: true };
case 'FETCH_USER_SUCCESS':
const { user } = action.payload; // Destructure the payload
return { ...state, user, loading: false };
case 'FETCH_USER_FAILURE':
return { ...state, loading: false, error: action.payload.error };
default:
return state;
}
}
説æïŒ ããã¯ããã§ãããæåããéã«`action.payload`ãã`user`ãªããžã§ã¯ããç°¡åã«æœåºããæ¹æ³ã瀺ããŠããŸãã
Reactã³ã³ããŒãã³ã
Reactã³ã³ããŒãã³ãã¯ãå ¥åãšããŠpropsïŒããããã£ïŒãåãåãããšããããããŸããåå²ä»£å ¥ã¯ãã³ã³ããŒãã³ãå ã§ãããã®propsã«ã¢ã¯ã»ã¹ããã®ãç°¡çŽ åããŸãã
function UserProfile({ name, age, location }) {
return (
<div>
<h2>{name}</h2>
<p>Age: {age}</p>
<p>Location: {location}</p>
</div>
);
}
// Example usage:
const user = { name: 'Maria Rodriguez', age: 28, location: 'Buenos Aires, Argentina' };
<UserProfile name={user.name} age={user.age} location={user.location} /> // verbose
<UserProfile {...user} /> // streamlined, passing all user properties as props
説æïŒ ãã®äŸã¯ãåå²ä»£å ¥ã颿°ã®ãã©ã¡ãŒã¿å ã§çŽæ¥propsã«ã¢ã¯ã»ã¹ããã®ãããã«ç°¡çŽ åãããã瀺ããŠããŸããããã¯ã颿°æ¬äœå ã§`const { name, age, location } = props`ãšå®£èšããã®ãšåãã§ãã
èšå®ç®¡ç
åå²ä»£å ¥ã¯ãããã©ã«ãå€ãæäŸããå¿ é ã®å€ãæ€èšŒããããšã§ãã¢ããªã±ãŒã·ã§ã³ã®èšå®ç®¡çã«åœ¹ç«ã¡ãŸãã
const defaultConfig = {
apiURL: 'https://default.api.com',
timeout: 5000,
debugMode: false
};
function initializeApp(userConfig) {
const { apiURL, timeout = defaultConfig.timeout, debugMode = defaultConfig.debugMode } = { ...defaultConfig, ...userConfig };
console.log(`API URL: ${apiURL}`);
console.log(`Timeout: ${timeout}`);
console.log(`Debug Mode: ${debugMode}`);
}
initializeApp({ apiURL: 'https://custom.api.com' });
// Output:
// API URL: https://custom.api.com
// Timeout: 5000
// Debug Mode: false
説æïŒ ãã®äŸã§ã¯ããŠãŒã¶ãŒãæäŸããèšå®ãšããã©ã«ãèšå®ããšã¬ã¬ã³ãã«ããŒãžãããŠãŒã¶ãŒãç¹å®ã®èšå®ãäžæžããã€ã€ãé©åãªããã©ã«ãå€ãç¶æã§ããããã«ããŠããŸããåå²ä»£å ¥ãšã¹ãã¬ããæŒç®åãçµã¿åãããããšã§ãéåžžã«èªã¿ããããä¿å®ãããããªã£ãŠããŸãã
ãã¹ããã©ã¯ãã£ã¹
- 説æçãªå€æ°åã䜿çšããïŒ æœåºããå€ã®ç®çãæç¢ºã«ç€ºã倿°åãéžã³ãŸãããã
- æ¬ èœããŠããããããã£ãåŠçããïŒ ããã©ã«ãå€ãæ¡ä»¶ãã§ãã¯ã䜿çšããŠãæ¬ èœããŠããããããã£ãé©åã«åŠçããŸãããã
- èªã¿ããããä¿ã€ïŒ èªã¿ããããäœäžãããé床ã«è€éãªåå²ä»£å ¥åŒã¯é¿ããŸããããå¿ èŠã§ããã°ãããå°ãã管çããããéšåã«åå²ããŠãã ããã
- TypeScriptãæ€èšããïŒ TypeScriptã¯éçåä»ããšããå ç¢ãªãã¿ãŒã³ãããã³ã°æ©èœãæäŸããã³ãŒãã®å®å šæ§ãšä¿å®æ§ãããã«åäžãããããšãã§ããŸãã
çµè«
JavaScriptã«ã¯ä»ã®èšèªã®ãããªæç€ºçãªãã¿ãŒã³ãããã³ã°æ§æã¯ãããŸããããåå²ä»£å ¥ãæ¡ä»¶æããã®ä»ã®ãã¯ããã¯ãšçµã¿åãããããšã§ãåæ§ã®çµæãåŸãããã®åŒ·åãªæ¹æ³ãæäŸãããŸãããããã®ãã¯ããã¯ãç¿åŸããããšã§ããªããžã§ã¯ããé åãæ±ãéã«ãããç°¡æœã§è¡šçŸåè±ãã§ä¿å®ããããã³ãŒããæžãããšãã§ããŸããæ§é çãããã³ã°ãçè§£ããããšã¯ãè€éãªããŒã¿æ§é ããšã¬ã¬ã³ãã«æ±ãåãäžãã倿§ãªããŒã¿èŠä»¶ãæã€ã°ããŒãã«ãªãããžã§ã¯ãã«é©ãããããã¯ãªãŒã³ã§å ç¢ãªJavaScriptã¢ããªã±ãŒã·ã§ã³ã«ã€ãªãããŸãã