åå®å šæ§ã®ãã¿ãŒã³ãšãããå ç¢ã§ä¿¡é Œæ§ã®é«ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®ã©ã³ã¿ã€ã æ€èšŒã®çµ±åã«é¢ãããã¯ããã¯ã玹ä»ããŸããåçãªããŒã¿ãåŠçããã©ã³ã¿ã€ã ã§åãæ£ããããšã確èªããæ¹æ³ãåŠã³ãŸãã
åå®å šæ§ã®ãã¿ãŒã³ïŒå ç¢ãªã¢ããªã±ãŒã·ã§ã³ã®ããã®ã©ã³ã¿ã€ã æ€èšŒã®çµ±å
ãœãããŠã§ã¢éçºã®äžçã§ã¯ãåå®å šæ§ã¯å ç¢ã§ä¿¡é Œæ§ã®é«ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®éèŠãªåŽé¢ã§ããéçã«åä»ããããèšèªã¯ã³ã³ãã€ã«æã®åãã§ãã¯ãæäŸããŸãããåçãªããŒã¿ãæ±ãå Žåãå€éšã·ã¹ãã ãšå¯Ÿè©±ããå Žåã«ã¯ãã©ã³ã¿ã€ã æ€èšŒãäžå¯æ¬ ã«ãªããŸãããã®èšäºã§ã¯ãåå®å šæ§ã®ãã¿ãŒã³ãšã©ã³ã¿ã€ã æ€èšŒãçµ±åããããã®ãã¯ããã¯ãæ€èšããããŒã¿æŽåæ§ã確ä¿ããã¢ããªã±ãŒã·ã§ã³ã§äºæããªããšã©ãŒãé²ããŸããéçã«åä»ããããèšèªãšåçã«åä»ããããèšèªã®äž¡æ¹ãå«ããããŸããŸãªããã°ã©ãã³ã°èšèªã«é©çšã§ããæŠç¥ãæ€èšŒããŸãã
åå®å šæ§ã®çè§£
åå®å šæ§ãšã¯ãããã°ã©ãã³ã°èšèªãåãšã©ãŒã鲿¢ãŸãã¯è»œæžããçšåºŠãæããŸããåãšã©ãŒã¯ãäžé©åãªåã®å€ã«å¯ŸããŠæäœãå®è¡ãããå Žåã«çºçããŸããåå®å šæ§ã¯ãã³ã³ãã€ã«æïŒéçåä»ãïŒãŸãã¯ã©ã³ã¿ã€ã æïŒåçåä»ãïŒã«åŒ·å¶ã§ããŸãã
- éçåä»ãïŒ JavaãC#ãTypeScriptãªã©ã®èšèªã¯ãã³ã³ãã€ã«äžã«åãã§ãã¯ãå®è¡ããŸããããã«ãããéçºè ã¯éçºãµã€ã¯ã«ã®æ©ã段éã§åãšã©ãŒããã£ããããã©ã³ã¿ã€ã é害ã®ãªã¹ã¯ã軜æžã§ããŸãããã ããéçåä»ãã¯ãéåžžã«åçãªããŒã¿ãæ±ãå Žåã«å¶éãããããšããããŸãã
- åçåä»ãïŒ PythonãJavaScriptãRubyãªã©ã®èšèªã¯ãã©ã³ã¿ã€ã æã«åãã§ãã¯ãå®è¡ããŸããããã«ãããããŸããŸãªåã®ããŒã¿ãæ±ãå Žåã«æè»æ§ãåäžããŸãããåé¢é£ã®ãšã©ãŒãé²ãããã«ã¯ãæ éãªã©ã³ã¿ã€ã æ€èšŒãå¿ èŠã§ãã
ã©ã³ã¿ã€ã æ€èšŒã®å¿ èŠæ§
éçã«åä»ããããèšèªã§ãã£ãŠããããŒã¿ãå€éšãœãŒã¹ããçºçããå Žåããåçãªæäœãåããå Žåã«ã¯ãã©ã³ã¿ã€ã æ€èšŒãå¿ èŠã«ãªãããšããããããŸããäžè¬çãªã·ããªãªã¯æ¬¡ã®ãšããã§ãã
- å€éšAPIïŒ å€éšAPIãšå¯Ÿè©±ããå Žåãè¿ãããããŒã¿ãåžžã«äºæãããåã«æºæ ããŠãããšã¯éããŸãããã©ã³ã¿ã€ã æ€èšŒã«ãããã¢ããªã±ãŒã·ã§ã³å ã§ããŒã¿ãå®å šã«äœ¿çšã§ããããã«ãªããŸãã
- ãŠãŒã¶ãŒå ¥åïŒ ãŠãŒã¶ãŒãå ¥åããããŒã¿ã¯äºæž¬ã§ãããåžžã«äºæããã圢åŒãšäžèŽãããšã¯éããŸãããã©ã³ã¿ã€ã æ€èšŒã¯ãç¡å¹ãªããŒã¿ãã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ãç Žå£ããã®ãé²ããŸãã
- ããŒã¿ããŒã¹ã®çžäºäœçšïŒ ããŒã¿ããŒã¹ããååŸãããããŒã¿ã«ã¯ãççŸãå«ãŸããŠããããã¹ããŒãã®å€æŽãåããå¯èœæ§ããããŸããã©ã³ã¿ã€ã æ€èšŒã«ãããããŒã¿ãã¢ããªã±ãŒã·ã§ã³ããžãã¯ãšäºææ§ãããããšãä¿èšŒãããŸãã
- ãã·ãªã¢ã©ã€ãŒãŒã·ã§ã³ïŒ JSONãXMLãªã©ã®åœ¢åŒããããŒã¿ããã·ãªã¢ã©ã€ãºããå ŽåãçµæãšããŠåŸããããªããžã§ã¯ããäºæãããåãšæ§é ã«æºæ ããŠããããšãæ€èšŒããããšãéèŠã§ãã
- æ§æãã¡ã€ã«ïŒ æ§æãã¡ã€ã«ã«ã¯ãã¢ããªã±ãŒã·ã§ã³ã®åäœã«åœ±é¿ãäžããèšå®ãå«ãŸããŠããããšããããããŸããã©ã³ã¿ã€ã æ€èšŒã«ããããããã®èšå®ãæå¹ã§äžè²«æ§ãããããšãä¿èšŒãããŸãã
ã©ã³ã¿ã€ã æ€èšŒã®ããã®åå®å šæ§ã®ãã¿ãŒã³
ã©ã³ã¿ã€ã æ€èšŒãã¢ããªã±ãŒã·ã§ã³ã«å¹æçã«çµ±åããããã«ãããã€ãã®ãã¿ãŒã³ãšãã¯ããã¯ã䜿çšã§ããŸãã
1. åã¢ãµãŒã·ã§ã³ãšãã£ã¹ãã£ã³ã°
åã¢ãµãŒã·ã§ã³ãšãã£ã¹ãã£ã³ã°ã䜿çšãããšãå€ã«ç¹å®ã®åãããããšãã³ã³ãã€ã©ãŒã«æç€ºçã«äŒããããšãã§ããŸãããã ããåãã§ãã¯ããã€ãã¹ããã¢ãµãŒããããåãæ£ãããªãå Žåã«ã©ã³ã¿ã€ã ãšã©ãŒãçºçããå¯èœæ§ããããããæ³šæããŠäœ¿çšããå¿ èŠããããŸãã
TypeScriptã®äŸïŒ
function processData(data: any): string {
if (typeof data === 'string') {
return data.toUpperCase();
} else if (typeof data === 'number') {
return data.toString();
} else {
throw new Error('ç¡å¹ãªããŒã¿å');
}
}
let input: any = 42;
let result = processData(input);
console.log(result); // Output: 42
ãã®äŸã§ã¯ã`processData`颿°ã¯`any`åãåãå ¥ããŸããããã¯ãããããçš®é¡ã®å€ãåãåãããšãã§ããããšãæå³ããŸãã颿°å ã§ã¯ã`typeof`ã䜿çšããŠããŒã¿ã®å®éã®åã確èªããé©åãªã¢ã¯ã·ã§ã³ãå®è¡ããŸããããã¯ãã©ã³ã¿ã€ã åãã§ãã¯ã®äžçš®ã§ãã`input`ãåžžã«æ°å€ã«ãªãããšãããã£ãŠããå Žåã¯ã`(input as number).toString()`ã®ãããªåã¢ãµãŒã·ã§ã³ã䜿çšã§ããŸãããã©ã³ã¿ã€ã æã®åå®å šæ§ã確ä¿ããããã«ã`typeof`ã䜿çšããæç€ºçãªåãã§ãã¯ã䜿çšããããšããå§ãããŸãã
2. ã¹ããŒãæ€èšŒ
ã¹ããŒãæ€èšŒã«ã¯ãããŒã¿ã®äºæãããæ§é ãšåãæå®ããã¹ããŒããå®çŸ©ããããšãå«ãŸããŸããã©ã³ã¿ã€ã æã«ãããŒã¿ã¯ãã®ã¹ããŒãã«å¯ŸããŠæ€èšŒãããäºæããã圢åŒã«æºæ ããŠããããšã確èªãããŸããJSON SchemaãJoiïŒJavaScriptïŒãCerberusïŒPythonïŒãªã©ã®ã©ã€ãã©ãªãã¹ããŒãæ€èšŒã«äœ¿çšã§ããŸãã
JavaScriptã®äŸïŒJoiã䜿çšïŒïŒ
const Joi = require('joi');
const schema = Joi.object({
name: Joi.string().required(),
age: Joi.number().integer().min(0).required(),
email: Joi.string().email(),
});
function validateUser(user) {
const { error, value } = schema.validate(user);
if (error) {
throw new Error(`æ€èšŒãšã©ãŒïŒ${error.message}`);
}
return value;
}
const validUser = { name: 'Alice', age: 30, email: 'alice@example.com' };
const invalidUser = { name: 'Bob', age: -5, email: 'bob' };
try {
const validatedUser = validateUser(validUser);
console.log('æå¹ãªãŠãŒã¶ãŒïŒ', validatedUser);
validateUser(invalidUser); // ããã«ãããšã©ãŒãã¹ããŒãããŸã
} catch (error) {
console.error(error.message);
}
ãã®äŸã§ã¯ãJoiã䜿çšããŠãŠãŒã¶ãŒãªããžã§ã¯ãã®ã¹ããŒããå®çŸ©ããŸãã`validateUser`颿°ã¯ãå ¥åãããããŒã¿ãã¹ããŒãã«å¯ŸããŠæ€èšŒããããŒã¿ãç¡å¹ãªå Žåã¯ãšã©ãŒãã¹ããŒããŸãããã®ãã¿ãŒã³ã¯ãå€éšAPIãŸãã¯ãŠãŒã¶ãŒããã®ããŒã¿ãã€ãŸãæ§é ãšåãä¿èšŒãããŠããªãããŒã¿ãæ±ãå Žåã«ç¹ã«åœ¹ç«ã¡ãŸãã
3. ããªããŒã·ã§ã³ä»ãã®ããŒã¿è»¢éãªããžã§ã¯ãïŒDTOïŒ
ããŒã¿è»¢éãªããžã§ã¯ãïŒDTOïŒã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã¬ã€ã€ãŒéã§ããŒã¿ã転éããããã«äœ¿çšãããåçŽãªãªããžã§ã¯ãã§ããDTOã«æ€èšŒããžãã¯ãçµã¿èŸŒãããšã§ãã¢ããªã±ãŒã·ã§ã³ã®ä»ã®éšåã§ããŒã¿ãåŠçãããåã«ãããŒã¿ãæå¹ã§ããããšã確èªã§ããŸãã
Javaã®äŸïŒ
import javax.validation.constraints.*;
public class UserDTO {
@NotBlank(message = "ååã¯ç©ºçœã«ã§ããŸãã")
private String name;
@Min(value = 0, message = "幎霢ã¯ãŒã以äžã§ããå¿
èŠããããŸã")
private int age;
@Email(message = "ç¡å¹ãªã¡ãŒã«åœ¢åŒ")
private String email;
public UserDTO(String name, int age, String email) {
this.name = name;
this.age = age;
this.email = email;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getEmail() {
return email;
}
@Override
public String toString() {
return "UserDTO{" +
"name='" + name + '\'' +
", age=" + age +
", email='" + email + '\'' +
'}';
}
}
// äœ¿çšæ³ïŒBean Validation APIã®ãããªæ€èšŒãã¬ãŒã ã¯ãŒã¯ã䜿çšïŒ
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import java.util.Set;
import javax.validation.ConstraintViolation;
public class Main {
public static void main(String[] args) {
UserDTO user = new UserDTO("", -10, "invalid-email");
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set> violations = validator.validate(user);
if (!violations.isEmpty()) {
for (ConstraintViolation violation : violations) {
System.err.println(violation.getMessage());
}
} else {
System.out.println("UserDTOã¯æå¹ã§ãïŒ" + user);
}
}
}
ãã®äŸã§ã¯ãJavaã®Bean Validation APIã䜿çšããŠã`UserDTO`ãã£ãŒã«ãã«å¶çŽãå®çŸ©ããŸããæ¬¡ã«ã`Validator`ã¯ãããã®å¶çŽã«å¯ŸããŠDTOããã§ãã¯ããéåãå ±åããŸãããã®ã¢ãããŒãã«ãããã¬ã€ã€ãŒéã§è»¢éãããããŒã¿ãæå¹ã§äžè²«æ§ãããããšãä¿èšŒãããŸãã
4. ã«ã¹ã¿ã åã¬ãŒã
TypeScriptã§ã¯ãã«ã¹ã¿ã åã¬ãŒãã¯ãæ¡ä»¶ãããã¯å ã§å€æ°ã®åãçµã蟌ã颿°ã§ããããã«ãããæŽç·Žãããåã«åºã¥ããŠç¹å®ã®æäœãå®è¡ã§ããŸãã
TypeScriptã®äŸïŒ
interface Circle {
kind: 'circle';
radius: number;
}
interface Square {
kind: 'square';
side: number;
}
type Shape = Circle | Square;
function isCircle(shape: Shape): shape is Circle {
return shape.kind === 'circle';
}
function getArea(shape: Shape): number {
if (isCircle(shape)) {
return Math.PI * shape.radius * shape.radius; // TypeScriptã¯ãããã§shapeãCircleã§ããããšãèªèããŠããŸã
} else {
return shape.side * shape.side; // TypeScriptã¯ãããã§shapeãSquareã§ããããšãèªèããŠããŸã
}
}
const myCircle: Shape = { kind: 'circle', radius: 5 };
const mySquare: Shape = { kind: 'square', side: 4 };
console.log('åã®é¢ç©ïŒ', getArea(myCircle)); // Output: Circle area: 78.53981633974483
console.log('æ£æ¹åœ¢ã®é¢ç©ïŒ', getArea(mySquare)); // Output: Square area: 16
`isCircle`颿°ã¯ãã«ã¹ã¿ã åã¬ãŒãã§ãã`true`ãè¿ããšãTypeScriptã¯`if`ãããã¯å ã®`shape`倿°ã`Circle`åã§ããããšãèªèããŸããããã«ãããåãšã©ãŒãªãã«`radius`ããããã£ã«å®å šã«ã¢ã¯ã»ã¹ã§ããŸããã«ã¹ã¿ã åã¬ãŒãã¯ããŠããªã³åãåŠçããã©ã³ã¿ã€ã æ¡ä»¶ã«åºã¥ããŠåå®å šæ§ã確ä¿ããã®ã«åœ¹ç«ã¡ãŸãã
5. 代æ°çããŒã¿åïŒADTïŒã䜿çšãã颿°åããã°ã©ãã³ã°
代æ°çããŒã¿åïŒADTïŒãšãã¿ãŒã³ãããã³ã°ã䜿çšããŠãããŸããŸãªããŒã¿ããªã¢ã³ããåŠçããããã®åå®å šã§è¡šçŸåè±ããªã³ãŒããäœæã§ããŸããHaskellãScalaãRustãªã©ã®èšèªã¯ãADTã®çµã¿èŸŒã¿ãµããŒããæäŸããŸãããä»ã®èšèªã§ãšãã¥ã¬ãŒãããããšãã§ããŸãã
Scalaã®äŸïŒ
sealed trait Result[+A]
case class Success[A](value: A) extends Result[A]
case class Failure(message: String) extends Result[Nothing]
object Result {
def parseInt(s: String): Result[Int] = {
try {
Success(s.toInt)
} catch {
case e: NumberFormatException => Failure("ç¡å¹ãªæŽæ°åœ¢åŒ")
}
}
}
val numberResult: Result[Int] = Result.parseInt("42")
val invalidResult: Result[Int] = Result.parseInt("abc")
numberResult match {
case Success(value) => println(s"è§£æãããæ°å€ïŒ$value") // Output: Parsed number: 42
case Failure(message) => println(s"ãšã©ãŒïŒ$message")
}
invalidResult match {
case Success(value) => println(s"è§£æãããæ°å€ïŒ$value")
case Failure(message) => println(s"ãšã©ãŒïŒ$message") // Output: Error: Invalid integer format
}
ãã®äŸã§ã¯ã`Result`ã¯ã`Success`ãš`Failure`ã®2ã€ã®ããªã¢ã³ããæã€ADTã§ãã`parseInt`颿°ã¯ãè§£æãæåãããã©ããã瀺ã`Result[Int]`ãè¿ããŸãããã¿ãŒã³ãããã³ã°ã¯ã`Result`ã®ããŸããŸãªããªã¢ã³ããåŠçããããã«äœ¿çšãããã³ãŒããåå®å šã§ããããšã©ãŒãé©åã«åŠçããããšãä¿èšŒããŸãããã®ãã¿ãŒã³ã¯ãæœåšçã«å€±æããå¯èœæ§ã®ããæäœãåŠçããå Žåã«ç¹ã«åœ¹ç«ã¡ãæåãšå€±æã®äž¡æ¹ã®ã±ãŒã¹ãåŠçããããã®æç¢ºã§ç°¡æœãªæ¹æ³ãæäŸããŸãã
6. Try-Catchãããã¯ãšäŸå€åŠç
å³å¯ã«ã¯åå®å šæ§ã®ãã¿ãŒã³ã§ã¯ãããŸããããé©åãªäŸå€åŠçã¯ãåé¢é£ã®åé¡ããçºçããå¯èœæ§ã®ããã©ã³ã¿ã€ã ãšã©ãŒãåŠçããããã«éèŠã§ããæœåšçã«åé¡ã®ããã³ãŒããtry-catchãããã¯ã§å²ããšãäŸå€ãé©åã«åŠçããã¢ããªã±ãŒã·ã§ã³ãã¯ã©ãã·ã¥ããã®ãé²ãããšãã§ããŸãã
Pythonã®äŸïŒ
def divide(x, y):
try:
result = x / y
return result
except TypeError:
print("ãšã©ãŒïŒäž¡æ¹ã®å
¥åãæ°å€ã§ããå¿
èŠããããŸãã")
return None
except ZeroDivisionError:
print("ãšã©ãŒïŒãŒãã§é€ç®ã§ããŸããã")
return None
print(divide(10, 2)) # Output: 5.0
print(divide(10, '2')) # Output: ãšã©ãŒïŒäž¡æ¹ã®å
¥åãæ°å€ã§ããå¿
èŠããããŸãã
# None
print(divide(10, 0)) # Output: ãšã©ãŒïŒãŒãã§é€ç®ã§ããŸããã
# None
ãã®äŸã§ã¯ã`divide`颿°ã¯æœåšçãª`TypeError`ãš`ZeroDivisionError`äŸå€ãåŠçããŸããããã«ãããç¡å¹ãªå ¥åãæäŸãããå Žåã«ã¢ããªã±ãŒã·ã§ã³ãã¯ã©ãã·ã¥ããã®ãé²ããŸããäŸå€åŠçã¯åå®å šæ§ãä¿èšŒãããã®ã§ã¯ãããŸããããã©ã³ã¿ã€ã ãšã©ãŒãé©åã«åŠçãããäºæããªãåäœãé²ããŸãã
ã©ã³ã¿ã€ã æ€èšŒãçµ±åããããã®ãã¹ããã©ã¯ãã£ã¹
- æ©æãã€é »ç¹ãªæ€èšŒïŒ ã¢ããªã±ãŒã·ã§ã³å šäœã«ç¡å¹ãªããŒã¿ãäŒæããã®ãé²ãããã«ãããŒã¿åŠçãã€ãã©ã€ã³ã®ã§ããã ãæ©ãæ®µéã§æ€èšŒãå®è¡ããŸãã
- æçãªãšã©ãŒã¡ãã»ãŒãžãæäŸããïŒ æ€èšŒã倱æããå Žåã¯ãéçºè ãåé¡ããã°ããç¹å®ããŠä¿®æ£ããã®ã«åœ¹ç«ã€ãæç¢ºã§æçãªãšã©ãŒã¡ãã»ãŒãžãæäŸããŸãã
- äžè²«æ§ã®ããæ€èšŒæŠç¥ã䜿çšããïŒ ã¢ããªã±ãŒã·ã§ã³å šäœã§äžè²«æ§ã®ããæ€èšŒæŠç¥ãæ¡çšããŠãããŒã¿ãåäžã§äºæž¬å¯èœãªæ¹æ³ã§æ€èšŒãããããã«ããŸãã
- ããã©ãŒãã³ã¹ãžã®åœ±é¿ãèæ ®ããïŒ ã©ã³ã¿ã€ã æ€èšŒã¯ãç¹ã«å€§èŠæš¡ãªããŒã¿ã»ãããæ±ãå Žåã«ãããã©ãŒãã³ã¹ã«åœ±é¿ãäžããå¯èœæ§ããããŸãããªãŒããŒããããæå°éã«æããããã«ãæ€èšŒããžãã¯ãæé©åããŸãã
- æ€èšŒããžãã¯ããã¹ãããïŒ æ€èšŒããžãã¯ã培åºçã«ãã¹ãããŠãç¡å¹ãªããŒã¿ãæ£ããèå¥ãããšããžã±ãŒã¹ãåŠçããããšã確èªããŸãã
- æ€èšŒã«ãŒã«ãææžåããïŒ ã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšãããæ€èšŒã«ãŒã«ãæç¢ºã«ææžåããŠãéçºè ãäºæãããããŒã¿åœ¢åŒãšå¶çŽãçè§£ã§ããããã«ããŸãã
- ã¯ã©ã€ã¢ã³ãåŽã®æ€èšŒã ãã«äŸåããªãïŒ ã¯ã©ã€ã¢ã³ãåŽã®æ€èšŒãå®è£ ãããŠããå Žåã§ããåžžã«ãµãŒããŒåŽã§ããŒã¿ãæ€èšŒããŸããã¯ã©ã€ã¢ã³ãåŽã®æ€èšŒã¯ãã€ãã¹ã§ããããããµãŒããŒåŽã®æ€èšŒã¯ã»ãã¥ãªãã£ãšããŒã¿æŽåæ§ã«ãšã£ãŠäžå¯æ¬ ã§ãã
çµè«
ã©ã³ã¿ã€ã æ€èšŒã®çµ±åã¯ãç¹ã«åçãªããŒã¿ãæ±ãå Žåãå€éšã·ã¹ãã ãšå¯Ÿè©±ããå Žåã«ãå ç¢ã§ä¿¡é Œæ§ã®é«ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«éèŠã§ããåã¢ãµãŒã·ã§ã³ãã¹ããŒãæ€èšŒãããªããŒã·ã§ã³ä»ãã®DTOãã«ã¹ã¿ã åã¬ãŒããADTãé©åãªäŸå€åŠçãªã©ã®åå®å šæ§ã®ãã¿ãŒã³ã䜿çšããããšã§ãããŒã¿æŽåæ§ã確ä¿ããäºæããªããšã©ãŒãé²ãããšãã§ããŸããæ©æãã€é »ç¹ã«æ€èšŒããæçãªãšã©ãŒã¡ãã»ãŒãžãæäŸããäžè²«æ§ã®ããæ€èšŒæŠç¥ãæ¡çšããããšãå¿ããªãã§ãã ããããããã®ãã¹ããã©ã¯ãã£ã¹ã«åŸãããšã§ãç¡å¹ãªããŒã¿ã«å¯ŸããŠå埩åããããããè¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããŸãã
ãããã®ãã¯ããã¯ãéçºã¯ãŒã¯ãããŒã«çµã¿èŸŒãããšã§ããœãããŠã§ã¢å šäœã®å質ãšä¿¡é Œæ§ãå€§å¹ ã«åäžãããäºæããªããšã©ãŒã«å¯Ÿããèæ§ãé«ããããŒã¿æŽåæ§ã確ä¿ã§ããŸããåå®å šæ§ãšã©ã³ã¿ã€ã æ€èšŒã«å¯Ÿãããã®ç©æ¥µçãªã¢ãããŒãã¯ã仿¥ã®åçãªãœãããŠã§ã¢ç°å¢ã§å ç¢ã§ä¿å®å¯èœãªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«äžå¯æ¬ ã§ãã