ខ្ញុំនឹងសរសេរអំពីបញ្ហា NULL ហើយប៉ុន្តែប្រសិនបើមានបញ្ហា NULL ជាអ្វីដែលខ្ញុំសរសេរនៅពេលបច្ចុប្បន្ននេះខ្ញុំសរសេរនៅពេលបច្ចុប្បន្ននេះ: NULL គឺនៅតែមានជីវិតហើយបាត់បង់។
TL;DR: ការជួយជួយជួយជួយជួយជួយជួយជួយជួយជួយជួយជួយជួយជួយជួយជួយជួយជួយជួយ
TL;DR: ការជួយជួយជួយជួយជួយជួយជួយជួយជួយជួយជួយជួយជួយជួយជួយជួយជួយជួយជួយ
ការបញ្ហានេះ
- ការកាត់បន្ថយ
- ការបញ្ហានិងការបញ្ចប់ធំ
- គោលបំណងគួរឱ្យចាប់អារម្មណ៍
- ការ debug
- អ្នកប្រើប្រាស់ Frustration
- ប្រព័ន្ធភាពធន់ទ្រាំ
- ការពិតប្រាកដទាប
ក្នុងក្រុមហ៊ុន Google Cloudគំនិត :
- ការដោះស្រាយបញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាស
- No Feature Flags: លេខកូដថ្មីមិនត្រូវបានដំឡើងយ៉ាងឆាប់រហ័សជាមួយការត្រួតពិនិត្យសុវត្ថិភាព
- ការបកប្រែទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំ
- No Randomized Backoff: ការដោះស្រាយបានធ្វើឱ្យអ៊ីនធឺណិតមានសម្ពាធខ្ពស់
- ការធ្វើតេស្តមិនត្រឹមត្រូវ: ការធ្វើតេស្តមិនត្រឹមត្រូវមិនត្រូវបានធ្វើតេស្តនៅពេលធ្វើតេស្ត
លក្ខខណ្ឌ
- ការពារ nulls
- ប្រើការត្រួតពិនិត្យ null ប្រសិនបើ nulls មានការត្រួតពិនិត្យរបស់អ្នក (ឧទាហរណ៍ API បណ្ដាញខាងក្រៅ)
- ការចាប់ផ្តើមគុណភាព default
- ការអនុវត្តកញ្ចប់ការពារ
- ការប្រើប្រាស់ Objects Null
- មិនប្រើ Options ។
️ ️ ️
https://hackernoon.com/code-refactoring-tips-no-015-remove-null
លក្ខខណ្ឌ
ខែ មិថុនា 12, 2019 aដំណឹងសំខាន់វាត្រូវបានគេហទំព័រ Google Cloud Platform ។
វាត្រូវបានទាក់ទងនឹងសេវាកម្ម Google Cloud និងសេវាកម្ម Google Workspace នៅទូទាំងពិភពលោកពីប្រហែល 10:49 ល្ងាចទៅ 1:49 ល្ងាច PDT (រយៈពេល 3 ម៉ោងទាំងអស់) ។
ការបាត់បន្ថយនេះត្រូវបានបង្កើតឡើងដោយការបាត់បន្ថយនៅក្នុងប្រព័ន្ធគ្រប់គ្រង API របស់ Google ។
- នេះជា Trigger:
នៅថ្ងៃទី 29 ខែមិថុនាឆ្នាំ 2025 ក្រុមហ៊ុន Google បានដំឡើងកូដថ្មីទៅក្នុង "ការត្រួតពិនិត្យសេវាកម្ម" (ប្រព័ន្ធគ្រប់គ្រង API របស់ពួកគេ) ដែលបានបន្ថែមការត្រួតពិនិត្យគោលនយោបាយកម្រិតបន្ថែមទៀត។
វាគឺជាកូដដែលមានគុណភាពសំខាន់។ វាគឺជាការគិតថ្លៃគោលបំណងមិនត្រូវបានការពារដោយសៀវភៅ.
- ការបាត់បង់:
ខែ មិថុនា 12, ការផ្លាស់ប្តូរគោលបំណងដែលមានពណ៌ស /0 0 0នៅពេលដែលការគ្រប់គ្រងការគ្រប់គ្រងការគ្រប់គ្រងការគ្រប់គ្រងការគ្រប់គ្រងការគ្រប់គ្រងការគ្រប់គ្រងការគ្រប់គ្រងការគ្រប់គ្រងការគ្រប់គ្រងការគ្រប់គ្រងការគ្រប់គ្រងការគ្រប់គ្រងការគ្រប់គ្រងការគ្រប់គ្រងការគ្រប់គ្រងការគ្រប់គ្រងការគ្រប់គ្រងការគ្រប់គ្រងការគ្រប់គ្រងការគ្រប់គ្រងការគ្រប់គ្រងការគ្រប់គ្រងការគ្រប់គ្រងការគ្រប់គ្រងការគ្រប់គ្រងការគ្រប់គ្រងការគ្រប់គ្រងការគ្រប់គ្រងការគ្រប់គ្រង។
- លទ្ធផលពិភពលោក:
ដោយសារតែការគ្រប់គ្រងកម្រិតនេះគឺជាប្រព័ន្ធគ្រប់គ្រងទូទាំងពិភពលោកទិន្នន័យនេះត្រូវបានចែកចាយនៅទូទាំងពិភពលោកក្នុងរយៈពេល ២ វិនាទីដែលធ្វើឱ្យការគ្រប់គ្រងសេវាកម្មកាត់បន្ថយនៅក្នុងតំបន់ទាំងអស់។
លក្ខខណ្ឌនៃការបញ្ចូលគ្នានៃការបញ្ចូលគ្នានៃការបញ្ចូលគ្នានៃការបញ្ចូលគ្នានៃការបញ្ចូលគ្នានៃការបញ្ចូលគ្នានៃការបញ្ចូលគ្នានៃការបញ្ចូលគ្នានៃការបញ្ចូលគ្នានៃការបញ្ចូលគ្នានៃការបញ្ចូលគ្នានៃការបញ្ចូលគ្នានៃការបញ្ចូលគ្នានៃការបញ្ចូលគ្នានៃការបញ្ចូលគ្នានៃការបញ្ចូល។
វាត្រូវបានធ្វើឡើងនៅពេលដែលការផ្លាស់ប្តូររួមមានការផ្លាស់ប្តូរ null вместоការផ្លាស់ប្តូរអតិថិជនដែលមានប្រសិទ្ធិភាព។
ទោះជាយ៉ាងណាក៏ដោយប្រសិនបើបញ្ហានេះមានសុវត្ថិភាពជាពិសេសនៅក្នុងបរិស្ថានផលិតកម្មដែលបញ្ហានេះអាចកាត់បន្ថយកម្មវិធីរបស់អ្នកនិងកាត់បន្ថយអ្នកប្រើ។
ស្លាកដូចជា Java, C# និង JavaScript ជាពិសេសមានភាពងាយស្រួលទៅនឹងបញ្ហានេះប៉ុន្តែលក្ខណៈពិសេសនិងគំរូភាសាច្នៃប្រឌិតអាចជួយអ្នកដោះស្រាយបញ្ហានេះទាំងអស់។
Nulls បានជាបញ្ហាសំខាន់នៅក្នុងឧស្សាហកម្មកម្មវិធីរយៈពេលជាច្រើនឆ្នាំហើយប៉ុន្តែអ្នកវិស្វករកម្មវិធីសាស្រ្តបានរក្សាទុកពួកគេប៉ុណ្ណោះដោយគ្មានការណែនាំពីអ្នកបង្កើតរបស់ពួកគេ។
លេខកូដ
ឱសថ
public class ServiceControlPolicy {
private SpannerDatabase spannerDB;
private QuotaManager quotaManager;
public void applyPolicyChange(PolicyChange change) {
// NULL POINTER: change can be null
Policy policy = spannerDB.getPolicy(change.getPolicyId());
// NULL POINTER: policy can be null from the database
String quotaField = policy.getQuotaField();
// NULL POINTER: quotaField can be null (blank field)
quotaManager.updateQuota(quotaField, change.getValue());
}
public void exerciseQuotaChecks(String region) {
// NULL POINTER: policies list can be null
List<Policy> policies = spannerDB.getPoliciesForRegion(region);
for (Policy policy : policies) {
// NULL POINTER: individual policy can be null
String quotaValue = policy.getQuotaField();
// NULL POINTER: quotaValue can be null before trim()
quotaManager.checkQuota(quotaValue.trim());
}
}
public boolean validatePolicyData(Policy policy) {
// NULL POINTER: policy parameter can be null
String quotaField = policy.getQuotaField();
// NULL POINTER: quotaField can be null before length()
return quotaField.length() > 0 &&
!quotaField.equals("null");
}
public void replicateGlobally(PolicyChange change) {
List<String> regions = getGlobalRegions();
for (String region : regions) {
// NULL POINTER: change.getPolicy() can return null
spannerDB.insertPolicy(region, change.getPolicy());
}
}
}
public class ServiceControlPolicy {
private SpannerDatabase spannerDB;
private QuotaManager quotaManager;
public void applyPolicyChange(PolicyChange change) {
if (change == null) {
// Assuming it comes from an external API
// Beyond your control
change = new NullPolicyChange();
}
Policy policy = findPolicyOrNull(change.policyId());
String quotaField = policy.quotaField();
if (!quotaField.isEmpty()) {
quotaManager.updateQuota(quotaField, change.value());
}
}
public void exerciseQuotaChecks(String region) {
if (region == null || region.isEmpty()) {
// Assuming it comes from an external API
// Beyond your control
return;
}
List<Policy> policies = policiesOrEmpty(region);
for (Policy policy : policies) {
String quotaValue = policy.quotaField();
if (!quotaValue.isEmpty()) {
quotaManager.checkQuota(quotaValue.trim());
}
}
}
public boolean validatePolicyData(Policy policy) {
if (policy == null) {
// Assuming it comes from an external API
// Beyond your control
// From now on, you wrap it
policy = new NullPolicy();
}
String quotaField = policy.quotaField();
return quotaField.length() > 0;
}
public void replicateGlobally(PolicyChange change) {
if (change == null) {
// Assuming it comes from an external API
// Beyond your control
// From now on, you wrap it
change = new NullPolicyChange();
}
Policy policy = change.policy();
if (policy == null) {
// Assuming it comes from an external API
// Beyond your control
// From now on, you wrap it
policy = new NullPolicy();
}
List<String> regions = globalRegions();
for (String region : regions) {
spannerDB.insertPolicy(region, policy);
}
}
private Policy findPolicyOrNull(String policyId) {
Policy policy = spannerDB.policy(policyId);
return policy != null ? policy : new NullPolicy();
}
private List<Policy> policiesOrEmpty(String region) {
List<Policy> policies = spannerDB.policiesForRegion(region);
if (policies == null) {
// This is a good NullObject
return Collections.emptyList();
}
return policies.stream()
.map(p -> p != null ? p : new NullPolicy())
.collect(Collectors.toList());
}
}
class NullPolicy extends Policy {
@Override
public String quotaField() { return ""; }
@Override
public String policyId() { return "unknown-policy"; }
@Override
public Map<String, String> metadata() {
return Collections.emptyMap();
}
}
class NullPolicyChange extends PolicyChange {
@Override
public String policyId() { return ""; }
@Override
public String value() { return ""; }
@Override
public Policy policy() { return new NullPolicy(); }
}
ពិនិត្យឡើងវិញ
- [x] ដោយស្វ័យប្រវត្តិ
អ្នកអាចរកឃើញការប៉ះពាល់បញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្ជាបញ្
Linters អាចស្វែងរកតម្លៃការបង្ហាញពីវិធីដែលអាចបង្ហាញ0 0ការស្វែងរកអេក្រង់អេក្រង់អេក្រង់ដែលមិនត្រូវបានចាប់ផ្តើមនិងប្រើឧបករណ៍វិញ្ញាបនប័ត្រស្ថានដែលមានប្រសិទ្ធិភាពបង្វិល null dereferences ។
អាសយដ្ឋានអ៊ីនធឺណិតច្នៃប្រឌិតច្នៃប្រឌិតច្នៃប្រឌិតច្នៃប្រឌិតច្នៃប្រឌិតច្នៃប្រឌិតច្នៃប្រឌិត។
សត្វ ️
- 0 0
លក្ខខណ្ឌ
- [x] ការអភិវឌ្ឍន៍
ហេតុអ្វីវាជាការសំខាន់ ️
នៅក្នុងពិភពលោកពិតសម្ភារៈដែលមានឬមិនមាន។
នៅពេលដែលអ្នករៀបចំនៃការនេះបានត្រឹមត្រូវនៅក្នុងកម្មវិធីរបស់អ្នកអ្នកបង្កើតការបោះឆ្នោត One-to-Oneក្នុងចំណោមការពិតនិងកូដ។
ការបាត់បន្ថយការបាត់បន្ថយនេះដោយអនុញ្ញាតឱ្យគោលបំណងដោយឥតគិតថ្លៃធ្វើឱ្យប្រសិនបើមានប្រសិនបើមានប្រសិនបើមានប្រសិនបើមានប្រសិនបើមានប្រសិនបើមិនមានប្រសិនបើមានប្រសិនបើមានប្រសិនបើមានប្រសិនបើមានប្រសិនបើមានប្រសិនបើមានប្រសិនបើមានប្រសិនបើមានប្រសិនបើមិនមានប្រសិនបើមានប្រសិនបើមានប្រសិនបើមានប្រសិនបើមានប្រសិនបើមានប្រសិនបើមានប្រសិនបើមានប្រសិនបើមានប្រសិនបើមានប្រសិនបើមិនមានប្រសិនបើមានប្រសិនបើមានប្រ
ប្រសិនបើអ្នកបានជ្រើសរើសឈ្មោះក្លឹបអនុញ្ញាតរបស់អ្នក "NULL" អ្នកនឹងទទួលបានសត្វចិញ្ចឹមជាច្រើន
ម៉ាស៊ីនបង្កើត AI បានបង្កើតកូដជាមួយនឹងការលក្ខខណ្ឌបង្វិលបង្វិលដោយឥតគិតថ្លៃដោយសារតែពួកគេផ្តោតលើប្រសិនបើមានដំណោះស្រាយស្រស់ស្អាត។
ពួកគេជាធម្មតាបង្កើតការហៅប្រព័ន្ធបច្ចេកវិទ្យានេះដោយគ្មានការគណនានៅពេលដែលប្រព័ន្ធផ្សព្វផ្សាយអាចមាន0 0 0លក្ខណៈពិសេសនៅក្នុងការបម្រើអតិថិជនដែលមានលក្ខណៈពិសេសលក្ខណៈពិសេសលក្ខណៈពិសេសលក្ខណៈពិសេសលក្ខណៈពិសេសលក្ខណៈពិសេសលក្ខណៈពិសេសលក្ខណៈពិសេស
ការរកឃើញ
ឧបករណ៍ AI អាចរកឃើញនិងដោះស្រាយបញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាសម្រាប់បញ្ហាស។
ពិនិត្យឡើងវិញ!
សូមអរគុណ: អ្នកជំនួយ AI បានធ្វើទំហំជាច្រើន
គោលបំណង: Remove all Null References
គោលបំណង: Remove all Null References
Without Proper Instructions |
With Specific Instructions |
---|---|
លក្ខណៈពិសេស
លក្ខខណ្ឌនៃការបញ្ចូលគ្នានៃការបញ្ចូលគ្នានៃការបញ្ចូលគ្នានៃការបញ្ចូលគ្នានៃការបញ្ចូលគ្នានៃការបញ្ចូលគ្នានៃការបញ្ចូលគ្នានៃការបញ្ចូលគ្នានៃការបញ្ចូលគ្នានៃការបញ្ចូលគ្នានៃការបញ្ចូល។
អ្នកអាចជួសជុលភាគច្រើននៃការកាត់បន្ថយទាំងនេះដោយអនុវត្តការត្រួតពិនិត្យដោយឥតខ្ចោះដោយប្រើគំរូរចនាសម្ព័ន្ធ Null Object និងអនុវត្តកម្មវិធីកម្មវិធីការពារ។
ទំហំទូលាយតូចនៃកូដការត្រួតពិនិត្យធ្វើឱ្យប្រសើរឡើងយ៉ាងខ្លាំងក្នុងការស្ថេរភាពកម្មវិធីនិងបទពិសោធន៍អ្នកប្រើ។
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-iii-t7h3zkv
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xliii
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxxix
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxvi
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xlii
លក្ខណៈពិសេស
លក្ខខណ្ឌ
គំនូរកូដគឺរបស់ខ្ញុំអារម្មណ៍.
ខ្ញុំនឹងហៅថាវាគឺជាដុល្លារដុល្លាររបស់ខ្ញុំ។ វាគឺជាការច្នៃប្រឌិតនៃការផ្លាស់ប្តូរដោយឥតគិតថ្លៃនៅឆ្នាំ 1965
ខ្ញុំនឹងហៅថាវាគឺជាដុល្លារដុល្លាររបស់ខ្ញុំ។ វាគឺជាការច្នៃប្រឌិតនៃការផ្លាស់ប្តូរដោយឥតគិតថ្លៃនៅឆ្នាំ 1965
លោក Tony ហ្គី
អត្ថបទនេះគឺជាផ្នែកមួយនៃ Series CodeSmell ។