Apa yang harus dikatakan kepada atasan Anda jika mereka ingin Anda menggunakan variabel global


13

Saya saat ini 4 bulan magang, dan ketika meninjau kode saya, bos saya tidak suka bahwa saya telah menyimpan objek khusus lokal ke sejumlah metode di beberapa kelas terpisah dalam satu majelis. Dia tidak suka bahwa saya dibuat objek baru setiap kali, dan sebaliknya mengatakan kepada saya untuk membuat objek tunggal yang dapat diakses dari mana saja. Karena itu saya harus membuatnya sebagai objek statis dalam kelas statis, dan cukup referensi dari sini saya ingin menggunakannya!

Bagaimana Anda menangani ini, karena saya hanya memprogram secara profesional selama 4 bulan!


4
Apakah bos Anda orang teknis atau non-teknis? Jika dia teknis, apakah dia sudah membaca "Clean Code" oleh Robert C. Martin?
George Stocker

5
Jadi, bos Anda mempekerjakan Anda untuk kode, dan sekarang memberi tahu Anda cara kode?
Jeremy Heiler

8
Anda mengatakan dalam komentar di bawah ini bahwa "objek tidak memiliki keadaan apa pun, terlepas dari banyak konstanta". Kalau begitu, kelas statis sepertinya solusi yang bagus untukku.
Justin

5
"Ya Bos" muncul dalam benak ...

2
"mengatakan kepada saya untuk membuat objek tunggal yang dapat diakses dari mana saja. Karena itu saya harus membuatnya sebagai objek statis" Ini bukan alasan yang masuk akal. Anda berbicara seolah-olah memiliki satu objek yang dapat diakses dari seluruh aplikasi menyiratkan Anda memiliki Singleton - mengapa Anda tidak membuatnya saja di root agregasi dan kemudian meneruskan rujukannya ke kelas-kelas dependen?
melahap elysium

Jawaban:


33

Jika satu objek cukup, membuat objek setiap kali adalah sia-sia, dan di sini bos Anda mungkin benar.

Masalahnya adalah akses yang tepat ke objek itu. Metode seperti pabrik dengan visibilitas yang tepat yang selalu mengembalikan objek statis itu adalah solusi pertama yang muncul dalam pikiran. Yang lain tentu ada.


3
+1: sebanyak saya tidak suka jawaban "GoF said so", benar benar.
Javier

1
Saya memang memikirkan Singletons, namun saya hanya melihatnya sebagai pembungkus variabel global, jadi saya tidak menindaklanjutinya. Saya akan coba ini sekarang, karena objek tidak memiliki keadaan apa pun, selain dari banyak konstanta jadi harus baik-baik saja. Terima kasih.
Darren Young

9
Saya menduga ini mungkin terjadi ("objek tidak memiliki keadaan ... banyak konstanta"). Bosmu benar. Tidak ada gunanya memberikan tekanan buatan pada pengumpul sampah untuk nilai-nilai yang tidak pernah berubah.
Berin Loritsch

3
@ darren-young: sebagai catatan, tidak memiliki status menarik dan memungkinkan untuk beberapa pendekatan yang kuat; lihat apa yang disebut 'pemrograman fungsional' jika Anda belum.
9000

8

Saya tidak bisa mengomentari kasus tertentu, tapi menggunakan variabel global adalah kadang-kadang solusi yang baik. Kelas Sistem Java penuh dengan variabel global yang statis.

Tetapi secara umum, jika Anda berpikir Anda benar dan bos Anda salah, maka mengapa Anda tidak meminta atasan Anda untuk menjelaskan mengapa menurutnya variabel global adalah solusi yang lebih baik? Jelas "Saya tidak suka itu" sama kaburnya seperti "variabel global itu jahat". Anda harus meminta lebih dari atasan Anda!

Jika dia tidak bisa memberikan alasan untuk sikapnya, dan Anda bisa memberikan alasan untuk sikap Anda, atau sebaliknya, maka itu adalah kesempatan belajar yang baik. Jika Anda berdua dapat membenarkan sikap Anda, maka itu mungkin masalah selera - atau masalah pengalaman: bos Anda harus pemrograman secara profesional lebih dari 4 bulan, saya pikir?


1
Lihat, java.lang.Systemberisi tepat tiga variabel global, dan untuk masing-masingnya ada metode untuk mengaturnya dengan benar. Tetapi Systempenuh dengan metode statis yang mengembalikan objek global, dan tidak ada yang salah dengan ini, tidak dapat membantah.
9000

2
Iya; Saya menganggap variabel global hampir sama dengan metode statis yang mengembalikan objek global.
Joonas Pulakka

Jadi Java melakukan ini. Ini pertanyaan yang sepenuhnya berbeda apakah itu ide yang bagus. Generator nomor acak standar C menjaga status global. Tetapi secara umum diakui bahwa ini mengerikan , dan karena itu pembangkit bilangan acak tidak dapat digunakan dalam aplikasi tertentu (lihat misalnya Bentley et al., Rekayasa fungsi semacam ). Java khususnya memiliki sejumlah masalah desain (yang sebagian telah diperbaiki di C #) jadi saya tidak terlalu berhati-hati menggunakannya sebagai argumen seperti ini.
Konrad Rudolph

@Konrald Rudolph: Pada akhirnya ini adalah keputusan desain. Setiap keputusan memiliki pro dan kontra. Misalnya, menjaga keadaan global dalam Systempenyederhanaan, katakanlah, 99,9% dari kasus penggunaan dengan biaya menyebabkan masalah di 0,1% sisanya. Tidak ada jawaban "benar" untuk apakah 0,1% layak kompleksitas tambahan.
Joonas Pulakka

5

Sebagai seseorang di posisi Anda, yang paling bisa Anda lakukan adalah belajar. Jika objek pada dasarnya adalah konstanta (artinya tidak dapat berubah dan tidak mempertahankan status), maka atasan Anda mungkin benar. Tidak ada salahnya memiliki objek konstan statis. Lagi pula, ada berapa definisi PI?

Sebagian orang mempertahankan pola pikir "tidak ada objek global" hingga menjadi titik tolak agama. Itu karena salah satu dari dua alasan: mereka agak sulit melacak bug atau kerapuhan sistem karena terlalu sering menggunakan variabel global / objek, atau mereka telah mendengar bahwa itu buruk dan mereka tidak dapat berpikir sendiri. Saya pribadi termasuk dalam kelompok orang yang telah terpukul oleh kerapuhan dan sulit untuk melacak bug - tapi saya juga belajar keseimbangan di sini.

Jika saya berada di posisi Anda, saya akan melanjutkan dan melakukan apa yang dikatakan bos - itu adalah pantatnya setelah semua. Lalu saya akan melihat dan melihat efek dari pilihan itu dari waktu ke waktu. Ini adalah alat belajar yang efektif.


Ini magang. Anda seharusnya belajar. Secara buta melakukan apa yang bos Anda katakan tidak pelajari.
David Thornley

5
Juga tidak secara membabi buta melawan bos Anda. Saran saya, seperti yang tertulis, adalah untuk mengamati efek dari pilihan bos. Kami (pada stackexchange) tidak dapat membuat penilaian nilai pada situasi karena kami kehilangan informasi penting. Ini adalah kasus untuk melakukan sedikit metode ilmiah. OP memiliki hipotesis, bos menantangnya. Sekarang saatnya untuk melakukan percobaan.
Berin Loritsch

2

Bergantung pada situasi spesifik, variabel global mungkin menjadi solusi terbaik. Dalam pemrograman tertanam, global tidak menempati ruang stack dan karena itu pilihan yang baik.

Global atau tidak, saya telah menemukan praksis yang bagus untuk menempatkan awalan pada global. Ini akan membuat pemrogram lain googling kode Anda menyadari dampaknya jika mengacaukannya.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.